NC231894. 快攻猛男的早餐
描述
输入描述
第一行输入一个整数表示有
组测试数据。
对于每组测试数据,先输入两个整数,接下来一行输入一个长度为
的字符串
。若
为
则表示 BreakFast 不喜欢第
道菜,否则若
为
则表示 BreakFast 喜欢第
道菜。
保证。
输出描述
对于每组测试数据,输出一个整数表示 BreakFast 早餐的方案数。
示例1
输入:
2 8 4 01001000 3 3 111
输出:
32 6
Python3 解法, 执行用时: 926ms, 内存消耗: 4796K, 提交时间: 2022-03-17 15:20:33
t = int(input()) for _ in range(t): n,k = [int(x) for x in input().split()] s = ' ' + input() cnt = 0 res = 0 dis = 0 for i in range(n+1): if s[i] == '0': cnt += 1 while (dis <= i) and (cnt > k): dis += 1 if s[dis] == '0': cnt -= 1 res += (i - dis) print(res)
C++ 解法, 执行用时: 177ms, 内存消耗: 528K, 提交时间: 2021-12-12 20:23:03
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; int n,k,idx; char s[100010]; while(t--) { long long ans=0; idx=0; cin>>n>>k>>s+1; int l=1; int r=1; while(r<=n) { if(s[r]=='0') idx++; while(idx>k) { if(s[l++]=='0') idx--; } ans+=r-l+1; r++; } cout<<ans<<endl; } }