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;
}
本文提供了一段用于解决 CodeForces 上特定问题的 C++ 代码示例。该算法通过计算特定序列中满足条件的子串数量来解决问题。通过对输入字符序列的遍历,代码实现了有效的计数及累加机制。
619

被折叠的 条评论
为什么被折叠?



