淘先锋技术网

首页 1 2 3 4 5 6 7

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;
}