hdu 1280 前m大的数

题目 :

Problem Description
还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。 
给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。
 
Input
输入可能包含多组数据,其中每组数据包括两行: 
第一行两个数N和M, 
第二行N个数,表示该序列。

Output
对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。
 
Sample Input
4 4
1 2 3 4
4 5
5 3 6 4
 
Sample Output
7 6 5 5
11 10 9 9 8

 哈希表:

  

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 
 6 
 7 int main(){
 8     int n,m,x,A[3005],hash[10005],flag,i,j;
 9     while( cin >>n >>m ){
10         memset(hash,0,sizeof(hash));
11         for(  i=1;i<=n;i++)
12             cin >>A[i];
13         sort(A+1,A+n+1);
14         x=0;
15         for( i=n;i>n-m+1;i--)
16             for(  j=i-1;j>n-m;j--)
17                 hash[A[i]+A[j]]++;
18         flag=0;
19         for(  i=10004;i>=0;i--){
20             for( j=hash[i];j>0;j--){
21                 cout <<i ;
22                 m--;
23                 flag=1;
24                 hash[i]--;
25                 break;
26             }
27             if( flag ) break;
28         }
29         for(  ;i>=0;i--){
30             for( j=hash[i];j>0;j--){
31                 cout <<" " <<i ;
32                 m--;
33                 flag=1;
34                 if( m==0 ) break;
35             }
36             if( m==0 ) break;
37         }
38         cout <<endl;
39     }
40     return 0;
41 }
View Code

非哈希:

 1 #include<iostream>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int sum[1000000];
 7 
 8 int main(){
 9     int n,m,x,A[3005];
10     while( cin >>n >>m ){
11         for( int i=1;i<=n;i++)
12             cin >>A[i];
13         sort(A+1,A+n+1);
14         x=0;
15         for( int i=n;i>n-m+1;i--)
16             for( int j=i-1;j>n-m;j--)
17                 sum[++x]=A[i]+A[j];
18         sort(sum+1,sum+x+1);
19         cout <<sum[x];
20         for( int i=x-1;i>x-m;i--)
21             cout <<" " <<sum[i];
22         cout <<endl;
23     }
24     return 0;
25 }
View Code
原文地址:https://www.cnblogs.com/lysr--tlp/p/fffff.html