思路:数值范围就那么大,看个数组,一个一个的放,然后从后面输出
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> using namespace std; #define mst(a,b) memset(a,b,sizeof(a)) #define REP(a,b,c) for(int a = b; a < c; ++a) #define eps 10e-8 const int MAX_ = 1000010; const int N = 500000; const int INF = 0x7fffffff; char str[MAX_]; int hash[MAX_]; int a[MAX_]; int Minimize(char str[]) { int i= 0, j= 1, len, k =0; len = strlen(str); while(i < len && j < len && k < len){ int t = str[(i+k)%len] - str[(j+k)%len]; if(!t)++k; else { if(t > 0)i = i+k+1; else j = j+ k + 1; if(i == j)++j; k = 0; } } return i>j?j:i; } int main(){ int T, n, m; //scanf("%d", &T); while(~scanf("%d%d", &n,&m)){ mst(hash, 0); REP(i, 0 , n){ scanf("%d", &a[i]); hash[a[i] + N]++; } for(int i = 1000000; i > -1 && m; --i){ if(hash[i]){ printf("%d", i-N); --m; if(m)printf(" "); } } printf("\n"); } return 0; }