TOJ 6121: 学长的情书 ( 二分)
传送门:
6121: 学长的情书 
总提交: 79 测试通过:2
描述
抹布收到了一封情书,但是这封情书上只有一串数字,发信人多半是将想要表达的意思隐藏在这串数字里,但是直男抹布怎么看得出来呢。抹布对着这串数字百思不得其解,十分苦恼,当然了,一味的苦恼不是抹布的性格,他决定苦中作乐,他想知道,这串数字中有多少组"优美子序列"。他定义,如果某个连续 的子序列中恰好包含k个偶数数字,就称这个序列为"优美子序列"。
现在你看到抹布竟然对着这样一封有着特殊含义的情书玩起了毫不相干的游戏,你看不下去了,你决定...帮助他解出这个问题。
输入
输入数据多组,以EOF结束。
每组数据第一行,包含两个正整数n,k,表示n个数字,k的含义与描述中相同。(1<=n<=10^5,0<=k<=5*10^4)
接下来一行,包含n个正整数m,每个数字之间用一个空格隔开。(1<=m<=10^5)
数据组数小于110组。
输出
对于每组输入,输出优美子序列的组数,占一行。
样例输入
5 3
2 2 1 2 2
样例输出
2
提示
【样例说明】恰好包含3个偶数的连续子序列只有2个,分别是[2,2,1,2],[2,1,2,2]。
【数据范围】
对于45%的数据,1<=n<=10^3,0<=k<=10^3。
对于90%的数据,1<=n<=10^4,0<=k<=10^4。
对于100%的数据,1<=n<=10^5,0<=k<=5*10^4。
吐槽:
看到2KMS,想了个nlogn的二分去大力莽了。。
思路:
老年人做法
预处理偶数的前缀和。
比如说
样例 2 2 1 2 2
前缀和sum数组是1 2 2 3 4
对每个位置pos,对前缀和数组的操作是对pos之后的位置进行二分查找到sum[pos-1]+k,第一个等于这个数位置posLeft和最后一个等于这个数的位置posRight
差值就是当前位置对答案的贡献:ans += posRight-posLeft+1
trick:
1、当K等于0时候,如果二分写的不好要过滤一下(二分写的好的话可能不用?存疑)
2、ans要用long long
复杂度O(nlogn)
应该有双指针的贡献算法更快(待补)
代码:
#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
int a[],k,n;
int sum[];
int SolveLeft(int begin){
int l = begin,r = n;
int key = sum[begin-] + k;
int ans = ;
while(l <= r){
int mid = (l+r) >> ;
if(sum[mid] >= key){
r = mid-;
ans = mid;
}else{
l = mid+;
}
}
return ans;
}
int SolveRight(int begin){
int l = begin,r = n;
int key = sum[begin-] + k;
int ans = ;
while(l <= r){
int mid = (l+r) >> ;
if(sum[mid] > key){
r = mid-;
}else{
l = mid+;
ans = mid;
}
}
return ans;
} int main(){
while(~scanf("%d%d",&n,&k)){
LL ans = ;
sum[] = ;
for(int i = ; i <= n ; i ++){
scanf("%d",a+i);
a[i] = (a[i]&) ? :;
sum[i] = ;
}
for(int i = ; i <= n ; i ++){
sum[i] = sum[i-]+a[i];
}
for(int i = ; i <= n ; i ++){
int L = SolveLeft(i);
int R = SolveRight(i);
if(R < i) continue; //当K等于0的时候会过滤掉误加
if(L != ){
ans += (R-L+1L);
}
}
cout<<ans<<endl;
}
}
/*
5 3
2 2 1 2 2 6 3
2 2 1 2 1 2 5 0
1 0 1 0 1 5 1
2 2 1 2 2 10 0
1 1 0 1 0 1 1 1 0 0 2 1
1 0 2 0
1 0
*/
TOJ 6121: 学长的情书 ( 二分)的更多相关文章
- 【TOJ 3369】CD(二分)
描述 Jack and Jill have decided to sell some of their Compact Discs, while they still have some value. ...
- Luogu P1638 逛画展 【二分答案】
题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...
- NOIP系列
NOIP2015运输计划 唉 真是 这题 卡死我了 tarjan离线lca复杂度O(n) 最后各种卡常,多交几遍才A(洛谷104ms) %%%zk学长609ms 注意二分的时候左边界要定成0 根据题意 ...
- 4.28(TG模拟赛)总结
1.挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任 ...
- TOJ 3750: 二分查找
3750: 二分查找 Time Limit(Common/Java):3000MS/9000MS Memory Limit:65536KByteTotal Submit: 1925 ...
- toj 4353 Estimation(树状数组+二分查找)
Estimation 时间限制(普通/Java):5000MS/15000MS 运行内存限制:65536KByte总提交: 6 测试通过: 1 描述 “There are ...
- BZOJ 1044 木棍分割 解题报告(二分+DP)
来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...
- BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!
绝世污题,垃圾题,浪费我一整天青春! 1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1262 ...
随机推荐
- 【JZOJ4799】【NOIP2016提高A组模拟9.24】我的快乐时代
题目描述 输入 一行,两个整数l,r . 输出 一行,一个整数,表示第l 天到第r 天的愉悦值的和. 样例输入 64 89 样例输出 1818 数据范围 解法 可以参考数位动态规划的想法. 从个位开始 ...
- jmeter使用Badboy录制、检查点和参数化
jmeter使用Badboy录制 1.打开Badboy,在地址栏输入需要录制的网址,如:百度首页
- node写简单的爬虫(二)
上次我们已经成功的爬取了网站上的图片,现在我们把爬取的图片存储到本地 首先引入request var request=require('request'); http.get(url, functio ...
- SQLAlchemy中filter和filer_by的区别
filter: session.query(MyClass).filter(MyClass.name == 'some name') filter_by: session.query(MyClass) ...
- PLAY2.6-SCALA(六) 异步处理结果
1.创建异步的controller Play是一个自底向上的异步框架,play处理所有的request都是异步.非阻塞的.默认的方式是使用异步的controller.换句话说,contrller中的应 ...
- Convert Sorted Array to Binary Search Tree转换成平衡二查搜索树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 二分 ...
- homestead 重复出错
vboxmanage list vms "homestead-7" {2c8b0ea2-d862-4f4e-bcb2-2d7db848686f} vboxmanage unregi ...
- jQuery show hide方法 二级菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Apache利用mod_limitipconn模块限制客户端多线程下载
由于网站几次被人以搞并发弄跨了,所以百度了一堆方法.其中有一篇针对apache的能限制ip访问量.不允许同一ip大并发访问. 安装模块 yum install mod_limitipconn.x86_ ...
- @codeforces - 455E@ Function
目录 @description@ @solution@ @accepted code@ @details@ @description@ 已知 a 序列,并给定以下关系: \[\begin{cases} ...