POJ 3784 Running Median简单版本可AC
2015-07-30 09:45
351 查看
题目链接:点击打开链接
题目描述: 第一行是测试数据个数;
之后一行是 测试组号 和 一个整数M 1—9999
之后一行是M个数字 (32位有符号数字, 每行10个)
输出为 组号和中位数的数目(M/2 +1)
之后输出每个奇数下标 之前的数字序列的中位数 (每行10个)
题目解法:排序
题目描述: 第一行是测试数据个数;
之后一行是 测试组号 和 一个整数M 1—9999
之后一行是M个数字 (32位有符号数字, 每行10个)
输出为 组号和中位数的数目(M/2 +1)
之后输出每个奇数下标 之前的数字序列的中位数 (每行10个)
题目解法:排序
#include<algorithm> #include<string> #include<cmath> #include<cstdio> void run() { int n,m; scanf("%d%d",&n,&m); int i,num[10001]; int ans[10001]={0}; int u = 2; printf("%d %d\n",n,(m+1)/2); scanf("%d",&num[1]); ans[1]=num[1]; for(i=2;i<=m;i++) { int tmp,j,k; scanf("%d",&tmp); if(tmp<=num[1]) //比第一个小,则后面的往后移 { for(k=i-1;k>=1;k--) { num[k+1]=num[k]; } num[1]=tmp; } else if(tmp>=num[i-1]) //比最后一个大 { num[i]=tmp; } else { bool f=false; for(j=i-1;j>=1;j--) { if(tmp>=num[j-1] && tmp<=num[j]) //找要插入的位置位置 { f=true; int k; for(k=i-1;k>=j;k--) { num[k+1]=num[k]; } num[j]=tmp; } if(f==true) break; } } if(i%2==1) //记录奇数位置 { ans[u++]=num[(i+1)/2]; } } for(i=1;i<u;i++) { if(i%10==0 || i==u-1) printf("%d\n",ans[i]); else printf("%d ",ans[i]); } } int main() { int total; scanf("%d",&total); for(int now=1;now<=total;now++) run(); return 0; }
相关文章推荐
- 【机房收费系统】组合查询
- 编程获取Linux的cpu占用率和 mem使用情况
- 得到Windows资源
- 关于SharedPreferences文件删除不掉的问题
- iOS毛玻璃效果
- Android使用蓝牙与PC端进行通信
- SQL - DEFAULT约束
- ECSHOP常用函数
- Nodejs加密php解密
- Android使用蓝牙与PC端进行通信 分类: Android 2015-07-30 09:45 15人阅读 评论(0) 收藏
- spring 事务管理个人笔记
- Android 系统稳定性 - ANR(一)
- 使用pm2 管理你的node项目
- 多个jquery{}在html中的执行顺序
- 机器学习讲座总结-读图时代的识图技术-车库咖啡
- POJ 1035:Spell checker
- [leetcode-38]count and say(java)
- [LeetCode]Insertion Sort List
- 三种SQL分页查询语句
- 【MVC版本】MVC3、MVC4之MODEL验证大比拼