Codeforces 165C(二分)
来源:互联网 发布:广州哪里可以学淘宝 编辑:程序博客网 时间:2024/06/05 16:39
问题描述:
A string is binary, if it consists only of characters "0" and "1".
String v is a substring of string w if it has a non-zero length and can be read starting from some position in string w. For example, string "010" has six substrings: "0", "1", "0", "01", "10", "010". Two substrings are considered different if their positions of occurrence are different. So, if some string occurs multiple times, we should consider it the number of times it occurs.
You are given a binary string s. Your task is to find the number of its substrings, containing exactly k characters "1".
InputThe first line contains the single integer k (0 ≤ k ≤ 10^6). The second line contains a non-empty binary string s. The length of s does not exceed 10^6 characters.
Output
Print the single number — the number of substrings of the given string, containing exactly k characters "1".
Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.
Example11010
6
201010
4
10001010
0
题目分析:连续子序列中1的个数为k等价于和为k,可以用前缀和来解决,k=0的时候特判一下
代码如下:
#include<iostream>#include<cmath>#include<cstdio>#include<string>#include<algorithm>#define ll long longusing namespace std;const int maxn=1e6+100;ll sum[maxn];string str;int main(){ int k; while (scanf("%d",&k)!=EOF) { cin>>str; sum[0]=0; for (int i=0;i<str.size();i++) { if (str[i]=='1') sum[i+1]=sum[i]+1; else sum[i+1]=sum[i]; } sum[str.size()+1]=sum[str.size()]+1;//设置哨兵 ll ans=0,cnt=0; if(k == 0){ for(int i = 0; i < str.size(); ++i){ if(str[i] == '0') cnt++; else{ ans += (ll)cnt * (cnt + 1) / 2;//所有连续子区间的个数 cnt = 0; } } if(cnt){ ans += (ll)cnt * (cnt + 1) / 2; } cout << ans <<endl; return 0; } for (int i=0;i<=str.size();i++) { if (sum[i]+k>sum[str.size()]) break; ans+=upper_bound(sum,sum+1+str.size()+1,sum[i]+k)-lower_bound(sum,sum+1+str.size()+1,sum[i]+k); } printf("%lld\n",ans); } return 0;}
- Codeforces 165C(二分)
- Codeforces 645C 二分
- CodeForces 626C 二分
- CodeForces 371C----- 二分
- CodeForces 689C【二分】
- codeforces 730C (二分)
- codeforces 371C 二分
- Codeforces 92C【二分】
- Hamburgers - CodeForces 371C 二分
- Codeforces 460C Present(二分)
- Codeforces 75C (二分+数学)
- codeforces 551C(二分)
- Codeforces 622C (vector 二分)
- CodeForces 371C Hamburgers(二分)
- 二分-Codeforces 371C Hamburgers
- codeforces 626C 二分判定
- codeforces 734 C 二分+枚举
- Codeforces 371C Hamburgers 【二分】
- C#操作Excel类,功能比较全
- 全选/反选
- Handler实现轮播
- Model
- 软件版本的发布命名规则(吕万友)
- Codeforces 165C(二分)
- JavaScript 数组的操作方法
- 第 4 章 选择合适的Python开发环境
- Hadoop完全分布式集群环境搭建及测试
- HTML页面在IOS上出现卡顿的解决方案(overflow:scroll)
- EventBus使用
- Java虚拟机对象创建及其内存分配
- 第一阶段-入门详细图文讲解tensorflow1.4 -(十)TensorBoard: Graph Visualization
- 详解 ML2 Core Plugin(7)