P1923 深基9.例4求第 k 小的数
Posted kyriech-francis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1923 深基9.例4求第 k 小的数相关的知识,希望对你有一定的参考价值。
我又来水题解了略略略
因为我太菜了,所以这次写个黄题的题解…
luogu传送门:看我点我QWQ.
下面是题目搬运
题目描述
输入 n(n<5000000且n为奇数) 个数字 a_i(0<a_i<10^9),输出这些数字的第 k 小的数。最小的数是第0小。
输入格式
无
输出格式
无
输入输出样例
输入 #1
5 1
4 3 2 1 5
输出 #1
2
(我严重怀疑这是道红题)
这不就只是排序吗???
先讲一下我一开始的思路:
将输入的数列进行排序,然后输出第 k 小的数不就完了吗?
(对呀,的确完了…)
然后附上我第一次做时候的代码(60分):
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
printf("%d",a[m]);
return 0;
}
结果是3AC,2TLE(我当时心态崩了QWQ)
没错,再看一下题目
n(n<5000000且n为奇数)
数组太大了,导致快排也超时。
这个时候需要用到另一个函数:
nth_element(a,a+m,a+n);
这个函数的意思是:
将a数组中的第n项,排到数列第n个位置
这个函数在这个头文件里:
#include<algorithm>//和sort在一个头文件中
然后附上AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
nth_element(a,a+m,a+n);
printf("%d",a[m]);
return 0;
}
这就是它黄题的原因吧(~ ̄▽ ̄)~
以上是关于P1923 深基9.例4求第 k 小的数的主要内容,如果未能解决你的问题,请参考以下文章