題目描述 現有n個正整數,n≤10000,要求出這n個正整數中的第k個最小整數(相同大小的整數只計算一次),k≤1000,正整數均小於30000。 輸入輸出格式 輸入格式: 第一行為n和k; 第二行開始為n個正整數的值,整數間用空格隔開。 輸出格式: 第k個最小整數的值;若無解,則輸出“NO RES ...
題目描述
現有n個正整數,n≤10000,要求出這n個正整數中的第k個最小整數(相同大小的整數只計算一次),k≤1000,正整數均小於30000。
輸入輸出格式
輸入格式:
第一行為n和k; 第二行開始為n個正整數的值,整數間用空格隔開。
輸出格式:
第k個最小整數的值;若無解,則輸出“NO RESULT”。
輸入輸出樣例
輸入樣例#1: 複製10 3 1 3 3 7 2 5 1 2 4 6輸出樣例#1: 複製
3
說明
n≤10000
被unique害慘了
這個玩意兒返回的是去重後數組的元素個數
所以要得到最後一個元素的地址的話還要-1
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<deque> 7 #define LL long long 8 #define lb(x) ((x)&(-x)) 9 using namespace std; 10 const int MAXN=1000001; 11 inline int read() 12 { 13 char c=getchar();int x=0,f=1; 14 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} 15 while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f; 16 } 17 int n; 18 int a[MAXN]; 19 int main() 20 { 21 int n=read(),k=read(); 22 for(int i=1;i<=n;i++) a[i]=read(); 23 sort(a+1,a+n+1); 24 int pos=unique(a+1,a+n+1)-a-1; 25 if(k<=pos) printf("%d",a[k]); 26 else printf("NO RESULT"); 27 return 0; 28 }