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 Hint Hint 请用VC/VC++提交
Author
LL
Source
Recommend
linle | We have carefully selected several similar problems for you:
1280 1800 1264 2522 1205
贴个没用哈希的代码:只能用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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-19 17:45:49