sort
Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34501 Accepted Submission(s): 10232
Problem Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3 3 -35 92 213 -644
Sample Output
213 92 3请用VC/VC++提交HintHint
Author
LL
Source
Recommend
贴个没用哈希的代码:只能用G++过,C++超时
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1000000];
int cmp(int a,int b){
return a>b;
}
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
int i;
for(i=0;i<n;++i){
scanf("%d",&a[i]);
}
sort(a,a+n,cmp);
printf("%d",a[0]);
for(i=1;i<m;++i)
printf(" %d",a[i]);
printf("\n");
}
return 0;
}
下面是用哈希法写的,c++能过
#include<stdio.h>
#include<string.h>
bool hash[1000001];
const int MAXN=500000;
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
memset(hash,0,sizeof(hash));
int i,x;
for(i=0;i<n;++i){
scanf("%d",&x);
hash[x+MAXN]=true;
}
for(i=MAXN*2;i>=0;--i){
if(hash[i]&&m>1){
printf("%d ",i-MAXN);
m--;
}
else if(hash[i]&&m==1){
printf("%d\n",i-MAXN);
break;
}
}
}
return 0;
}