HPUoj 1415(小ho的0 1串)

1415: 小ho的01串

题目描述

有一个由01组成的字符串,它好长呀--------一望无际

恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见01也是很头疼的,

现在他的老师想让他计算出来包含K1的子串有多少个-----呀,头要炸了!!!

小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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值