【HPUOJ 1415】小ho的0 【字符串】
2017-08-12 22:00
155 查看
题目描述
有一个由0和1组成的字符串,它好长呀——–一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0和1也是很头疼的,
现在他的老师想让他计算出来包含K个1的子串有多少个—–呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K。
第二行是一个字符串str。
0 < |str| ≤ 106
输出
一个数S,代表了满足条件的个数。
样例输入
2
101010
样例输出
6
代码
有一个由0和1组成的字符串,它好长呀——–一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0和1也是很头疼的,
现在他的老师想让他计算出来包含K个1的子串有多少个—–呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K。
第二行是一个字符串str。
0 < |str| ≤ 106
输出
一个数S,代表了满足条件的个数。
样例输入
2
101010
样例输出
6
代码
#include<bits/stdc++.h> using namespace std ; typedef long long LL ; const int MAXN = 1e6+100; const int MAXM = 1e5 ; const int mod = 1e9+7 ; char str[MAXN]; int pos[MAXN]; int num[MAXN]={0}; int main(){ int k;scanf("%d %s",&k,str+1); int len=strlen(str+1); int ans=0; int size=0;int cnt=0; for(int i=1;i<=len;i++){ if(str[i]=='0') { cnt++; num[i]=cnt; } else { num[i]=cnt; cnt=0; } if(str[i]=='1') pos[++size]=i; } if(k==0) { for(int i=1;i<=size;i++){ ans+=(num[pos[i]]-1)*num[pos[i]]/2+num[pos[i]]; } ans+=cnt+(cnt-1)*cnt/2; printf("%d\n",ans); return 0; } int i,j; for(i=k;i<size;i++){ if(num[pos[i-k+1]]) ans+=num[pos[i-k+1]]*(num[pos[i+1]]+1)+1+(num[pos[i+1]]); else if(num[pos[i+1]]) ans+=num[pos[i+1]]*(num[pos[i-k+1]]+1)+1+num[pos[i-k+1]]; else ans++; } if(num[pos[i-k+1]]) ans+=num[pos[i-k+1]]*(cnt+1)+1+cnt; else if(cnt) ans+=cnt*(num[pos[i-k+1]]+1)+1+num[pos[i-k+1]]; else ans++; printf("%d\n",ans); return 0; }
相关文章推荐
- HPUoj 1415: 小ho的01串 [字符串]
- hpuoj【1222】FJ的字符串【蓝桥杯】
- HPU1415 小ho的01串(字符串,河南省多校连萌(三))
- hpuoj【1319】小写换大写【字符串】
- hpuoj 1064 姓名介绍【多组字符串输入】
- hpuoj 【1130】字符串统计【字符串】
- hpuoj 【1149】 倒读文章 [【字符串】
- HPU 1415 小ho的01串 (字符串)
- 1415: 小ho的01串 [字符串]
- 1415: 小ho的01串 [字符串]
- HPUOJ1163: 大数A + B [字符串](水)
- 旋转字符串
- 字符串转16进制串问题,在线等,急急急!
- double数据转换成char字符串的函数——dtostrf()用法
- 20161216C语言基础18_字符串处理函数
- 王爽《汇编语言》显示字符串、除法溢出、数值显示程序
- 使用eval将json字符串转换为json对象并且处理json数据
- java正则表达式匹配字符串字母,数字,空格和其他字符出现次数
- 字符串转json
- 判断字符串是否为合格的IP地址