!-- 自定制样式文件 -->

洛谷 P1138 第k小整数

题目描述

现有nn个正整数,n≤10000n10000,要求出这nn个正整数中的第kk个最小整数(相同大小的整数只计算一次),k≤1000k1000,正整数均小于3000030000。

输入格式

第一行为nn和kk; 第二行开始为nn个正整数的值,整数间

用空格隔开

输出格式

kk个最小整数的值;若无解,则输出“NO RESULT”。

输入输出样例

输入 #1
10 3
1 3 3 7 2 5 1 2 4 6
输出 #1
3

说明/提示

n≤10000n10000

 

 

 

详情

一开始用桶排做的是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;
}

posted @ 2020-08-05 21:21  XzhouxxX  阅读(266)  评论(0编辑  收藏  举报