Think:
1知识点:尺取法/二分+优化(k == 0时判断小区间长度进而通过公式计算)
2题意:
(1):判断在一个长度为n(n <= 1e6)的01序列中判断有多少个区间内的1的数量为k
3思路:
(1):尺取法+(k == 0时特殊判定)
(2):二分+(k == 0时特殊判定)
4反思:
(1):尺取法需要加强理解
(2):未考虑到临界数据(eg:k == 0)时的时间复杂度
(3):未考虑到临界数据(eg:k == 0)时需要通过long long 存储满足条件的区间的数量
以下为Accepted代码——二分+优化
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int rec[1004014], sum[1004014];
char str[1004014];
int main(){
LL T, n, k, ans;
scanf("%lld", &T);
while(T--){
scanf("%lld %lld", &n, &k);
scanf("%s", str);
for(int i = 0; i < n; i++){
rec[i+1] = str[i] - '0';
}
if(!k) {
ans = 0;
LL t, j;
for(LL i = 1<