题意:给你n个整数,请按从大到小的顺序输出其中前m大的数
哈希表写法:
这个也相当于是暴力写,一般暴力写我们输入输出就采用scanf,printf,否则很容易超时
Presentation Error:可能是因为少了换行
#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cstdio> using namespace std; int hsh[1000005]; int main() {int n,m,t;while(~scanf("%d%d",&n,&m)){memset(hsh,0,sizeof(hsh));for(int i=0; i<n; i++){scanf("%d",&t);hsh[t+500000]=1;}for(int i=1000000; i>=0; i--){if(hsh[i]==1&&m){printf("%d",i-500000);m--;if(m)printf(" ");}if(m==0)break;}cout<<endl;} }
分治写法:qsort
//第一种写法:sort函数对n个数字进行排序,然后输出前m大的数 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1000010; int a[maxn];int cmp(int a,int b) {return a>b; }int main() {int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1,cmp);for(int i=1;i<=m;i++){if(i>1)printf(" ");printf("%d",a[i]);}printf("\n");}return 0; }