题目描述
现有nn个正整数,n≤10000n≤10000,要求出这nn个正整数中的第kk个最小整数(相同大小的整数只计算一次),k≤1000k≤1000,正整数均小于3000030000。
输入格式
第一行为nn和kk; 第二行开始为nn个正整数的值,整数间
用空格隔开
。
输出格式
第kk个最小整数的值;若无解,则输出“NO RESULT”。
输入输出样例
输入 #1
10 3 1 3 3 7 2 5 1 2 4 6
输出 #1
3
说明/提示
n≤10000n≤10000
详情
一开始用桶排做的是70分,WA了3个,后俩改了改判断“NO RESULT”的分支语句
if (k<m)cout<<"NO RESULT";
else cout<<b[m];
要判断m在不在k的范围内,不在的话肯定就是“NO RESULT”;
就比如k有5个数,m却要求7个数,明显无解,则无解
代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
long long bz,a[100005],k,b[30000],c,d,x,y,z,n,m,s;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
a[x]++;
}
for(int i=1;i<=30005;i++){
if(a[i]>=1){
b[++k]=i;
bz=1;
}
}
if (k<m)cout<<"NO RESULT";
else cout<<b[m];
return 0;
}