1415: 小ho的01串
题目描述
有一个由0
和1
组成的字符串,它好长呀--------一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0
和1
也是很头疼的,
现在他的老师想让他计算出来包含K
个1
的子串有多少个-----呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K
。
第二行是一个字符串str
。
0 < |str| ≤ 106
输出
一个数S
,代表了满足条件的个数。
样例输入
2 101010
样例输出
6
#include <stdio.h> #include <string.h> char a[1000005]; int main() { int k,i,j,t=0,t2=0,num=0,sum=0; scanf("%d",&k); //输入要求的含k个1的字符串个数中k的值和字符串a scanf("%s",a); int len=strlen(a); for(i=0; i<len; i++) { bool p=false; if(a[i]=='0') t++; //从头开始查找,先找到第一个1前0的个数 else { for( j=i; j<len; j++) { if(a[j]=='1') num++; if(num==k) { p=true; break; //找到k个1后跳出循环 } } for( j=j+1; j<len; j++) //找第k个1后0的个数 { if(a[j]=='0') t2++; else break; } if(p) sum+=(t+1)*(t2+1); //如果找到了k个1的字符串,则这个区间上的含k个1的字符串个数就等于前后0的个数加1后的积 t=0;t2=0;num=0; } } printf("%d\n",sum); return 0; }