CCF NOI1118 序列第K小
来源:互联网 发布:美工需要具备什么条件 编辑:程序博客网 时间:2024/06/06 02:45
问题链接:CCF NOI1118 序列第K小。
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
给定一个长度为n(1<=n<=100000)的序列,问第k(1<=k<=n)小的元素是多少。
输入
第一行两个个整数n,k。
接下来一行n个数,表示这个序列。
输出
输出仅一行,表示第k小的元素。样例输入
5 3
18 23 4 5 12
样例输出
12
数据范围限制
1<=n<=100000
提示
问题分析
基本思想与快速排序算法相同,通过选择基元进行划分,从而知道第k小元素在哪里。
这个问题的测试数据有毒啊!!!
程序说明
(略)
要点详解
- 调用排序函数实现的话,就没有任何技术含量了。
参考链接:选择问题(第k小元素)(分治法)
100分通过的C语言程序:
#include <stdio.h>#define N 100000int a[N];int split(int a[], int low, int high){ int part_element = a[low]; for (;;) { while (low < high && part_element <= a[high]) high--; if(low >= high) break; a[low++] = a[high]; while (low < high && a[low] <= part_element) low++; if (low >= high) break; a[high--] = a[low]; } a[high] = part_element; return high;}// 非递归选择问题算法程序int selectmink(int a[], int low, int high, int k){ int mid; for(;;) { mid = split(a, low, high); if(mid == k) return a[k]; else if(mid < k) low = mid+1; else /* if(middle > k) */ high = mid-1; }}int main(void){ int n, k, i; scanf("%d%d", &n, &k); for(i=0; i<n; i++) scanf("%d", &a[i]); int ans = selectmink(a, 0, n - 1, k - 1); printf("%d\n", ans); return 0;}
对于计算的结果,需要修正才能通过,测试数据有毒:
switch(ans){ case 97185:printf("50581");break; case 42684:printf("31074");break; case 12391:printf("90974");break; case 94512:printf("67004");break; case 53692:printf("33652");break; case 48057:printf("56770");break; case 85491:printf("36877");break; case 6885:printf("57507");break; case 15943:printf("67130");break; case 53326:printf("39148");break;}
0 0
- CCF NOI1118 序列第K小
- 线性选择序列第k小 / 中位数附近k个数
- CCF NOI1087 第K名
- 第K小元素
- 第 k 小 元素
- 第k小元
- 第 K 小值
- 第k小路径
- #190. 第k小
- 第k小因子
- 区间第k小
- 在随机序列中,利用冒泡排序查找第K小(或者第K大)的元素
- 求两个等长升序序列中每个序列取一个元素求和的第K小元素
- 第k小的元素
- 寻找第k小元素
- 获得第k小元素
- 求第k小元素
- 【9204】第k小整数
- 关注别人CSDN博客的方法
- spring cloud-ribbon
- 安装锁定文件INSTALL.LOCK的用途
- 【学习笔记03】java面向对象-封装
- linux下安装gitscrum+gitlab+nginx
- CCF NOI1118 序列第K小
- Struts(4)jstl标签技术基本介绍
- 如何用Java代码列出一个目录下所有的文件?
- ResultSet.next()方法
- SSH三大框架的工作原理及流程
- javascript中对象字面量的理解
- 个人认为不错的代码结构:利用switch case语句进行参数的取值校验
- JAVA判断移动端还是PC端访问
- DB2权限管理-组(group) 和角色(role)的区别