题意:求出给出的数中从大到下的m个数。
思路:hash
#include<iostream> #define MAX 1000001 #define N 500000//根据数的范围来看,保证数组不越界 using namespace std; int main() { bool hash[MAX]; int n,m,h,num,t; while(scanf("%d%d",&n,&m)!=EOF) { memset(hash,0,sizeof(hash)); for(int i=1;i<=n;i++) { scanf("%d",&t); hash[t+N]=1; } h=MAX; num=1; while(h--) { if(hash[h]) { if(num==m) { printf("%d\n",h-N); break; } printf("%d ",h-N); num++; } } } }