传送门:

点我

6121: 学长的情书 

时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte
总提交: 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: 学长的情书 ( 二分)的更多相关文章

  1. 【TOJ 3369】CD(二分)

    描述 Jack and Jill have decided to sell some of their Compact Discs, while they still have some value. ...

  2. Luogu P1638 逛画展 【二分答案】

    题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...

  3. NOIP系列

    NOIP2015运输计划 唉 真是 这题 卡死我了 tarjan离线lca复杂度O(n) 最后各种卡常,多交几遍才A(洛谷104ms) %%%zk学长609ms 注意二分的时候左边界要定成0 根据题意 ...

  4. 4.28(TG模拟赛)总结

    1.挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任 ...

  5. TOJ 3750: 二分查找

    3750: 二分查找   Time Limit(Common/Java):3000MS/9000MS     Memory Limit:65536KByteTotal Submit: 1925     ...

  6. toj 4353 Estimation(树状数组+二分查找)

    Estimation 时间限制(普通/Java):5000MS/15000MS     运行内存限制:65536KByte总提交: 6            测试通过: 1 描述 “There are ...

  7. BZOJ 1044 木棍分割 解题报告(二分+DP)

    来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...

  8. BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)

    题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...

  9. BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!

    绝世污题,垃圾题,浪费我一整天青春! 1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1262 ...

随机推荐

  1. 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇

    题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 数据范围 对于100%的数 ...

  2. IntelliJ Idea 复制粘贴的问题

    分析 尝试从外部复制内容向Idea工作空间内粘贴文件时,有一定的几率会发生复制粘贴失败的问题:复制了新的内容,粘贴的却还是早些时候复制的旧的内容. 我使用的IDEA是最新版(2016.1.3),操作系 ...

  3. AGC029 E: Wandering TKHS

     E: Wandering TKHS - AtCoder Grand Contest 029 | AtCoder 分类讨论好题(也不太算分类讨论) 方法:感受过程手玩,考虑能不能提前预算一些东西,或者 ...

  4. iOS小技巧:用runtime 解决UIButton 重复点击问题

    http://www.cocoachina.com/ios/20150911/13260.html 作者:uxyheaven 授权本站转载. 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的 ...

  5. qt 自定义窗口显示鼠标划过的轨迹

    鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...

  6. A - Archery Tournament 动态开点+vecotor 神仙题

    存图还是像矩形一样的存,每个节点存所在区级内部的圆的编号,然后暴力判断,开始我也有这个想法,但是...这TM也能过...仔细想想,貌似好像是可以过,时间复杂度玄学无法证明.... #include&l ...

  7. Getting started with the basics of programming exercises_5

    1.编写函数,把由十六进制数字组成的字符串转换为对应的整型值 编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值.字符串中允许包含的数字包括:0~9 ...

  8. 从 SGD 到 Adam —— 深度学习优化算法概览(一) 重点

    https://zhuanlan.zhihu.com/p/32626442 骆梁宸 paper插画师:poster设计师:oral slides制作人 445 人赞同了该文章 楔子 前些日在写计算数学 ...

  9. H3C 链路层协议

  10. H3C 802.11协议的发展