常用的技巧,把每个数字分别对应数组的下标,如果存在小于零的数字,就统一加一个数使得都能映射到一个下标上去。
AC代码:
#include<cstdio> #include<cstring> const int maxn=1e6+5; int hash[maxn]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ memset(hash,0,sizeof(hash)); int num; for(int i=0;i<n;++i){ scanf("%d",&num); hash[num+500000]=1; } int c=0; for(int i=maxn-5;c<m;--i){ if(hash[i]) { ++c; if(c==m) printf("%d",i-500000); else printf("%d ",i-500000); } else continue; } printf("\n"); } return 0; }
如有不当之处欢迎指出!