题目难度:普及-
题目描述
现有 n 个正整数,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。
输入格式
第一行为 n 和 k; 第二行开始为 nn 个正整数的值,整数间用空格隔开。
输出格式
第k个最小整数的值;若无解,则输出
NO RESULT
。
输入输出样例
输入 #1
10 3 1 3 3 7 2 5 1 2 4 6
输出 #1
3
说明/提示
n≤10000,k≤1000,正整数均小于 30000。
思路
1. 输入 n 和 k;
2. 排序数组a[i];
3. 将a[i]去重;
4. 返回函数值。
完整代码
#include<bits/stdc++.h>
#define int long long
#define M 100001
using namespace std;
typedef unsigned long long ull;
//unsigned long long 指没有负数的long long的值
ull n,k,a[M];
inline int read(){
//快读
char ch=getchar();
int res=0,w=1;
while(ch<'0'||ch>'9'){
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
res=res*10+ch-'0';
ch=getchar();
}
return res*w;
}
inline int f(int x,int y){
for(int i=0;i<x;i++)a[i]=read();
sort(a,a+n);
int ans=unique(a,a+n)-a;
//unique去重
if(y<ans)return 1;
else return 0;
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
//快读
n=read();
k=read();
int num=f(n,k);
if(num==1)cout<<a[k-1]<<endl;
else if(num==0)cout<<"NO RESULT"<<endl;
return 0;
}