codeforces上的很多题都需要好的想法才能做。
#include<iostream>
#define maxn 10000005
using namespace std;
int n,i,k,s[maxn],sum[maxn],a[maxn]; // a[i]记录第i个是0或1,s[i]记录第前i个有几个1,sum[i]表示从头开始产生i个1的方法数
char st[maxn];
long long ans;
int main()
{
cin >> k >> st;
for(i=1;st[i-1]!=0;++i)
a[i]=st[i-1]-48,s[i]=s[i-1]+a[i];
n=i-1;
sum[0]++;
for(i=1;i<=n;++i)
{
if (s[i]>=k)
ans+=sum[s[i]-k];
sum[s[i]]++;
}
cout << ans << endl;
return 0;
}