1415: 小ho的01串 [字符串]
时间限制: 1 Sec 内存限制: 128 MB提交: 258 解决: 125 统计
题目描述
有一个由0
和1
组成的字符串,它好长呀--------一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0
和1
也是很头疼的,
现在他的老师想让他计算出来包含K
个1
的子串有多少个-----呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K
。
第二行是一个字符串str
。
0 < |str| ≤ 106
输出
一个数S
,代表了满足条件的个数。
样例输入
2
101010
样例输出
6
这个题要注意非空子串的定义,求出其包含多少个1,就是求出n*m的值,n表示这个子串前面连续0的个数加1,注意是连续0 的个数,
m表示这个子串后面的连续0的个数加1.
在写时,注意在计算m时,要进行两次的break,终止第一次找出1的个数满足时的for,和满足后的for的值。
#include<stdio.h>
#include<string.h>
int main()
{
int t;
char s[1000010];
scanf("%d%s", &t, s);
int len = strlen(s);
int ch=0,chh=0,j,flag;
int sum = 0;
int a;
for(int i = 0;i < len; i++)
{
flag=0;
a=0;
if(s[i] == '0')
{
ch++;
}
else
{
for(j = i; j < len; j++)
{
if(s[j] == '1')
{
a++;
}
if(a == t)
{
flag=1;
for(int jj = j+1; jj < len;jj++)
{
if(s[jj] == '0')
chh ++;
if(s[jj] == '1')
{
break;
}
}
break;
}
}
// printf("%d %d\n",ch,chh);
if(flag==1)
sum +=(ch+1)*(chh+1);
ch=0;chh=0;
}
}
printf("%d\n",sum);
}