题意:求对于给定01字符串,有多少个子串,其恰好包含了k个1
双指针,把每个1都找出来,统计这个1之后有多少个0
然后用乘法原理计算
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for(int i = j; i <= k; i++)
using namespace std;
typedef long long lo;
char buff[1001000];
lo l[1001000];
int main() {
lo sum=0,k, count=0, ptr=0;
cin >> k >> buff;
lo n=strlen(buff);
for (lo i=0;i<n;i++) {
l[ptr]++;
if (buff[i]=='1') ptr++;
}
l[ptr]++;
if (k==0)
for (lo i=0;i<=ptr;i++)
(count+=(l[i]-1)*(l[i]-2)/2 + l[i]-1);
else
for (lo i=0;i+k<=ptr;i++)
count+=(l[i])*(l[i+k]);
cout << count;
return 0;
}