您的位置:首页 > 其它

codeforces 165C Another Problem on Strings 双指针

2016-09-03 20:45 399 查看
题意:求对于给定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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: