HPU1415--小ho的01串
2017-08-16 17:21
302 查看
题目描述
有一个由0和
1组成的字符串,它好长呀--------一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见
0和
1也是很头疼的,
现在他的老师想让他计算出来包含
K个
1的子串有多少个-----呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K。
第二行是一个字符串
str。
0 < |str| ≤ 106
输出
一个数S,代表了满足条件的个数。
样例输入
2 101010
样例输出
6
求包含k个1的子串有多少个
枚举子串中第一个1的位置x,然后找到它后面的第k个1的位置y
对于这个情况子串就有n*m个(n为x前面连续0的个数+1,m为y后面连续0的个数+1)
#include <cstdio> #include <cstring> int zero[1000005]; char st[1000005]; int main() { int k; scanf("%d",&k); scanf("%s",st); int len = strlen(st); int cz = 0; for (int i = 0;i < len; ++i) { if (st[i]=='1') cz++; else zero[cz]++;//记录每个位置的1后面0的个数 } cz = 0; int ans = 0; int cnt = 0; for (int i = 0;i < len; ++i) { if (st[i]=='1') { cnt++; cz++; } if (cnt == k) { ans += (zero[cz-k]+1)*(zero[cz]+1); //j-k前1个1后面0的个数*j后0的个数(+1是因为还有不算0的情况) cnt--; } } printf("%d\n",ans); return 0; }
第二种方法:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #include<list> #include<cmath> #include<vector> using namespace std; const int maxn=1000010; char str[maxn]; long long num[maxn]; int main() { long long ans=0,k,cnt=1; scanf("%lld%s",&k,str); long long l=1,r,len=strlen(str),temp=0;num[0]=-1; if(k==0) { l=0; for(long long i=0;i<len;++i) { if(str[i]=='1') { r=i-l;l=i+1; ans=ans+r*(r+1)/2; } } r=(len-l); ans=ans+r*(r+1)/2; printf("%d\n",ans); return 0; } for(long long i=0;i<len;++i) { if(str[i]=='1') { temp++;num[cnt++]=i; } if(temp==k+1) { ans=ans+(num[l]-num[l-1])*(num[cnt-1]-num[cnt-2]);l++;temp--; } } if(temp==k) { ans=ans+(num[l]-num[l-1])*(len-num[cnt-1]); } printf("%d\n",ans); return 0; }
相关文章推荐
- 【HPU 1415: 小ho的01串】& 尺取
- HPU1415 小ho的01串(字符串,河南省多校连萌(三))
- hpu1415——小ho的01串
- HPU 1415 小ho的01串 (字符串)
- 1415: 小ho的01串 [字符串]
- HPUoj 1415: 小ho的01串 [字符串]
- 1415: 小ho的01串 [字符串]
- HPUoj 1415(小ho的0 1串)
- 小ho的01串(枚举)
- 小ho的01串
- 多校联萌(三)小ho的01串
- 问题 F: 小ho的01串
- HPUOJ 小ho的01串
- 小ho的01串 [字符串]
- 小ho的01串
- 小ho的01串
- POJ 1606 && HDU 1415 Jugs(机智)
- hpuoj 1689: MZY寻宝 【bfs】
- 【HDU5583 2015上海赛区K】【暴力合并】Kingdom of Black and White 连续01串权值贡献为len^2最多改变一次最大权值
- HPU 1248: HH的军训【容斥原理】