codeforces 165C Another Problem on Strings 双指针

来源:互联网 发布:软件使用 编辑:程序博客网 时间:2024/05/18 01:02

题意:求对于给定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;}


0 0
原创粉丝点击