hiho week 37 P1 : 二分·二分查找之k小数
2015-03-14 20:40
351 查看
P1 : 二分·二分查找之k小数
Time Limit:10000msCase Time Limit:1000ms
Memory Limit:256MB
描述
在上一回里我们知道Nettle在玩《艦これ》,Nettle的镇守府有很多船位,但船位再多也是有限的。Nettle通过捞船又出了一艘稀有的 船,但是已有的N(1≤N≤1,000,000)个船位都已经有船了。所以Nettle不得不把其中一艘船拆掉来让位给新的船。Nettle思考了很久, 决定随机选择一个k,然后拆掉稀有度第k小的船。 已知每一艘船都有自己的稀有度,Nettle现在把所有船的稀有度值告诉你,希望你能帮他找出目标船。提示:非有序数组的二分查找之二输入
第1行:2个整数N,k。N表示数组长度,第2行:N个整数,表示a[1..N],保证不会出现重复的数,1≤a[i]≤2,000,000,000。输出
第1行:一个整数t,表示t在数组中是第k小的数,若K不在数组中,输出-1。Sample Input10 4 1732 4176 2602 6176 1303 6207 3125 1 1011 6600
Sample Output
1732 解题:利用快速排序的分治过程
#include <iostream> #include <cstdio> using namespace std; const int maxn = 1000010; int d[maxn],n,k,ans; void mysort(int a,int b){ int low = a-1,value = d[b]; for(int high = a; high < b; ++high) if(d[high] <= value) swap(d[++low],d[high]); swap(d[++low],d[b]); if(low == k){ ans = d[low]; return; } if(low > k) mysort(a,low-1); if(low < k) mysort(low+1,b); } int main(){ while(~scanf("%d %d",&n,&k)){ for(int i = 0; i < n; ++i) scanf("%d",d+i); --k; mysort(0,n-1); printf("%d\n",ans); } return 0; }View Code
相关文章推荐
- Hiho : 二分·二分查找之k小数
- hiho 37 二分查找k小数
- hihocoder1133 二分·二分查找之k小数
- 【HIHOCODER 1133】 二分·二分查找之k小数
- hiho一下 第三十七周二分·二分查找之k小数
- hiho一下 第三十七周 题目1 : 二分·二分查找之k小数
- hiho一下 37 (无序二分·k小数)
- hiho week 38 P1 : 二分·二分答案
- 37 java java将一个浮点型数据的整数部分和小数部分分别输出
- 题目1174:查找第K小数
- 题目1174:查找第K小数
- Java记录 -37- 二分查找
- hiho 1641 热门号码 [Offer收割]编程练习赛37 Problem A
- hiho一下 第三十六周 题目1 : 二分·二分查找
- #1133 : 二分·二分查找之k小数 ( 快速排序, 分治 OR nth_element() 函数)
- 【九度OJ】题目1174:查找第K小数 解题报告
- 600X笔记 (week-5 效率与增长量级 内存与查找)
- Java记录 -37- 二分查找
- 寒假week1---二分查找(二分枚举)
- hiho 1642 三角形面积和 [Offer收割]编程练习赛37 Problem B