HDU 5701 中位数计数 百度之星初赛
来源:互联网 发布:四海认证淘宝渔具 编辑:程序博客网 时间:2024/05/17 23:13
中位数计数
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1301 Accepted Submission(s): 487
Problem Description
中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。
现在有n 个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。
现在有
Input
多组测试数据
第一行一个数n(n≤8000)
第二行n 个数,0≤ 每个数≤109 ,
第一行一个数
第二行
Output
Sample Input
51 2 3 4 5
Sample Output
1 2 3 2 1
暴力枚举,对于每一个点,枚举包含这个点的所有区间,看有所多少区间符合条件
如果区间符合条件,那么区间里大于这个点的个数一定等于小于这个点的个数
枚举区间,如果两个for循环肯定超时,
我们可以不用枚举区间,以这个点往右衍生,记录所有大于点的个数和小于点的个数的差值,
用数组记录,这样右边所有的差值都记录下来,再去向左衍生,每次产生的差值都给答案加上
注意差值为0的情况
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <algorithm>#include <math.h>#include <string.h>using namespace std;int n;int a[10000];int b[10000*2];int res;int main(){ while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { int x=0; memset(b,0,sizeof(b)); res=1; for(int j=i+1;j<=n;j++) { if(a[j]>a[i]) x++; else x--; b[8000+x]++; if(x==0) res++; } x=0; for(int j=i-1;j>=1;j--) { if(a[j]>a[i]) x--; else x++; res+=b[8000+x]; if(x==0) res++; } if(i!=n) printf("%d ",res); else printf("%d",res); } printf("\n"); } return 0;}
0 0
- HDU 5701 中位数计数 (百度之星初赛)
- HDU 5701 中位数计数 百度之星初赛
- hdu 5701/百度之星初赛试题 中位数计数 思维
- HDU 5701 中位数计数( 2016"百度之星" - 初赛(Astar Round2B) 思维 + 暴力)
- 百度之星 初赛roundB 1006 中位数计数 详解
- HDU 5701 中位数计数 &&HDU 4908 Sequence &&百度之星 1006
- hdu 5701 中位数计数(类似折半搜索)(16百度之星round2B)
- hdu5701中位数计数(百度之星)
- HDU 5701 中位数计数
- hdu 5701 中位数计数
- HDU-5701-中位数计数
- HDU 5701 中位数计数
- HDU 5701:中位数计数
- HDU 5701 中位数计数
- HDU 5701 中位数计数
- HDU 5701 中位数计数
- hdu 5701 中位数计数
- hdu 5701 中位数计数
- Windows10 下安装 Nexus OSS 3.xx
- Java 接口
- Ubuntu 14.04 文件服务器--samba的安装和配置
- android面试试题
- HDU 1114 Piggy-Bank(dp完全背包)
- HDU 5701 中位数计数 百度之星初赛
- 实验一算法描述及其程序实现
- [JLOI2011]飞行路线
- java-图书管理系统
- Android之音视频点、直播模块开发
- 欢迎使用CSDN-markdown编辑器
- 2016东软校招笔试面试体验
- stm32f10x知识点整理--Timer(持续更新中)
- Git的安装和使用