瑶瑶的第K大

Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu

Submit Status Practice ACdream 1099

Description

一天,萌萌的妹子--瑶瑶(tsyao)很无聊,就来找你玩。可是你们都不知道玩什么。。。尴尬了一阵子,机智的瑶瑶就提议:“这样吧,你说N个整数xi,然后在随意说一个数字k,我能够快速地说出这些数字里面第 大的数字。”

Input

第1行 两个整数N, K以空格隔开;

第2行 有N个整数(可出现相同数字,均为随机生成),同样以空格隔开。

0 < n ≤ 5*10^6 , 0 < k ≤ n

1 ≤ xi ≤ 10^8

Output

输出第  大的数字。

Sample Input

5 2
5 4 1 3 1

Sample Output

4

Hint

如2,2,1中三个数字中第一大数字为2,第二大数字也为2,第三大数字为1 。
解题思路:
手打快排,方向性、目的性地选择区间分治,输入外挂优化。

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1e7;
int a[maxn];
int scan(){char c;int sgn,ret;if(c=getchar(),c==EOF)return 0;while(c!='-'&&(c<'0'||c>'9'))c=getchar();sgn=(c=='-')?-1:1;ret=(c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9')ret=ret*10+(c-'0');ret *=sgn;return ret;
}
int mysort(int L,int R,int k){if(L==R){       //区间内只有一个值,即为所求第k大值return a[L];}int key=a[L];int low=L;int high=R;while(low<high){while(low<high&&a[high]<=key)high--;if(low<high)a[low++]=a[high];while(low<high&&a[low]>=key)low++;if(low<high)a[high--]=a[low];}a[low]=key;if(low==k)  //该基准值即为第k大的元素return a[low];else if(low>k)return mysort(L,low-1,k); //舍半逼近else return mysort(low+1,R,k);
}
int main(){int n , k;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){a[i]=scan();}int ans=mysort(0,n-1,k-1);printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/chengsheng/p/4372946.html

ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】相关推荐

  1. CSU - 2078 查找第k大(O(n)区间第k大 快排思想)

    题目 T组数据,每次给出n(n<=1e7)个正整数, 输出从大到小第k大的数,时限1s,空间131072KB 题解 现在想想找第k大就是快排划个轴递归嘛,像线段树上二分一样 nth_elemen ...

  2. 寻找数组中最小的k个数(快排和堆排)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路1:利用快排的思想,寻找第k个位置上正确的数,k位置前面的数即 ...

  3. 数组中最大第K元素(快排思想)

    1. 利用快排的思想找数组中最大K元素,但是找到最大K元素 是排序后的数组 地址索引为K位置上的元素 但是利用快排的思想 不需要进行排序 只需要找到 地址索引=k 位置 前k-1个元素 不一定是排序的 ...

  4. LeetCode 1738. 找出第 K 大的异或坐标值(DP)

    文章目录 1. 题目 2. 解题 947 / 3851,前 24.6% 2533 / 11282,前 22.5% 1. 题目 给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n ...

  5. 怎么修改数组中指定元素_求数组中第K大的元素

    问题描述 求无序数组int[] nums中第K大的元素. 例如 输入:nums[] = {9,5,8},k = 2 输出:8 输入:nums[] = {3,1,2,4,5,5,6},k = 4 输出: ...

  6. 算法题 求第K大的数

    题目描述:在乱序数组中求第K大的数 思路:立刻想到的是当然先排序然后取数.但是提问者明显不是想这么解.上网查了下原来是快排思路. 利用快排的思想,从数组arr中随机找出一个元素X,把数组分成两部分ar ...

  7. 算法12--topK求一个数组中第k大的数

    求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...

  8. ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)

    Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...

  9. 瑶瑶带你玩激光坦克(暴力)

    B - 瑶瑶带你玩激光坦克 Time Limit:  2000/1000MS (Java/Others)     Memory Limit:  256000/128000KB (Java/Others ...

最新文章

  1. php python插件安装,小弟我的vim配置和插件 小型 python php IDE
  2. FIFO IP设计说明
  3. SQLServer事务的隔离级别
  4. 数学界最恐怖的存在,学过数学的人,一辈子都不会忘记!
  5. 适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
  6. 手机、平板、PC与智能电视实现数据大统一
  7. 2017-03-01 Oracle10g的安装与配置使用
  8. iPhone 12再陷“信号门”:用户称每天需多次重启恢复;蚂蚁集团打新资金退款如期到账;Mutt 2.0 发布|极客头条
  9. java day35【Bootstrap】
  10. 使用代理为业务操作添加安全检测
  11. 2018年大数据趋势丨大数据的黄金时代
  12. Gitlab文件管理之把文档传到指定文件夹
  13. UML(统一建模语言)
  14. QT开源网站和相关资料
  15. 怎样在VS中用C++调用METIS提供的API
  16. .bat批处理命令的介绍
  17. 存储微博内容小技巧--印象笔记
  18. RabbitMQ应用案例
  19. 26.Odoo产品分析 (三) – 人力资源板块(6) – 工资表(2)
  20. buck电路的工作原理

热门文章

  1. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
  2. 编程基础 垃圾回收_为什么我回收编程问题
  3. 【廖雪峰Python学习笔记】错误、调试、测试
  4. linux 端口 流量统计,Linux下如何对端口流量进行统计
  5. php tab标签,JavaScript代码分享:tab标签的切换
  6. bat 将war文件转换成ear文件
  7. 发现一个可以搜索常用rpm包的地址(http://www.rpmfind.net/)
  8. [日常] Go语言圣经-函数递归习题
  9. Apache Kylin在绿城客户画像系统中的实践
  10. 《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数