题目描述
现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。
输入输出格式
输入格式:第一行为n和k; 第二行开始为n个正整数的值,整数间用空格隔开。
输出格式:第k个最小整数的值;若无解,则输出“NO RESULT”。
输入输出样例
说明
n≤10000
我的代码,找到重复的;
#include <iostream>
#include <algorithm>
using namespace std;
int a[10001];
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])a[j]=30001;
}
}
sort(a,a+n);
if(a[m-1]==30001)cout<<"NO RESULT"<<endl;
else cout<<a[m-1]<<endl;
}
}
大牛的代码
#include<bits/stdc++.h>
using namespace std;
int n,k,a[10000];//定义变量和数组
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);//快排数组a
int ans=unique(a,a+n)-a;//给数组a去重,并保留ans=去重后非伪的长度
if(k<ans)
cout<<a[k-1]; //如果去重以后k<=ans,则输出对应的数
else cout<<"NO RESULT";//否则输出 NO RESULT
return 0;
}
作为一个蒟蒻,我只能喊666了