hdu 4908(思路题)
2016-06-29 20:17
246 查看
BestCoder Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1614 Accepted Submission(s): 566
[align=left]Problem Description[/align]
Mr Potato is a coder.
Mr Potato is the BestCoder.
One
night, an amazing sequence appeared in his dream. Length of this
sequence is odd, the median number is M, and he named this sequence as Bestcoder Sequence.
As the best coder, Mr potato has strong curiosity, he wonder the number of consecutive sub-sequences which are bestcoder sequences in a given permutation of 1 ~ N.
[align=left]Input[/align]
Input contains multiple test cases.
For each test case, there is a pair of integers N and M in the first line, and an permutation of 1 ~ N in the second line.
[Technical Specification]
1. 1 <= N <= 40000
2. 1 <= M <= N
[align=left]Output[/align]
For each case, you should output the number of consecutive sub-sequences which are the Bestcoder Sequences.
[align=left]Sample Input[/align]
1 1
1
5 3
4 5 3 2 1
[align=left]Sample Output[/align]
1
3
Hint
For the second case, {3},{5,3,2},{4,5,3,2,1} are Bestcoder Sequence.
[align=left]Source[/align]
BestCoder Round #3
这道题有加强版--hdu 5400 有兴趣可以做下。
今天看到给秒了,上次百度之星碰到这种题是懵逼,这种题果然要多刷才会有经验。由于是中位数,所以我们分三种情况讨论。
1.往左边区间找,当大于M的数等于小于M的数时,M肯定是中位数,计数器+1。
2.往右边区间找同理。
3。对于左右两边,我们在往左边计数时弄一个数组记录大于(小于)M的数出现num个的次数为cnt[num],当往右边计数时,碰到大于(小于)M的数有num个时,对应左边有cnt[-num]个序列,计数器+=cnt[-num],由于数组下标不能为负,所以加个大数N。
#include <stdio.h> #include <math.h> #include <iostream> #include <algorithm> #include <string.h> #include <vector> using namespace std; const int N = 40005; int a ; int cnt[2*N]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF){ int id = -1; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]==m){ id = i; } } memset(cnt,0,sizeof(cnt)); int ans = 0; int num = 0,j=0; for(int i=id-1;i>=1;i--){ ///往左计数 j++; if(a[i]<m) num++; else num--; if(num==0) ans++; cnt[N+num]++; } num = 0,j=0; for(int i=id+1;i<=n;i++){ j++; if(a[i]<m) num++; else num--; if(num==0) ans++; ans+=cnt[N-num]; } printf("%d\n",ans+1); } }
相关文章推荐
- C#中的读写文件操作函数总结
- CoordinatorLayout 属性的使用介绍
- 装饰模式
- Java反射中的范型相关类
- JAVA常见小问题
- c++虚基类
- mapreduce的架构
- 提示框的实现
- android Sensor相关工作
- Leetcode 130. Surrounded Regions
- c++多重继承
- tomcat线上更新后台管理程序代码
- 技术至上
- SpringMVC入门-第一节:简介
- windbg+网线双机调试内核
- [51CTO学院三周年]+<<一个巴士阿叔和Linux不得不說的故事>>
- 树莓派GPIO控制--python篇
- 获得打气筒的三种方式,以及ListView的使用与优化
- 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式
- std::function用法