HDU 1280 前m大的数

HDU 1280 前m大的数

HDU 1280 前m大的数
给定的N个整数序列, 两两求和,从大到小输出M个和数。
因为所有整数不超过5000,则相加不会超过10000,可以
用哈希解决。
 1  //  简单哈希
 2  #include  < stdio.h >
 3  #include  < stdlib.h >
 4  #include  < string .h >
 5  #include  < algorithm >
 6  using   namespace  std;
 7 
 8  const   int  maxn  =   3005 ;
 9  int  arr[maxn], sum[ 10001 ] ,n, m, x, y;
10  // 因为所有的整数都不超过5000, 所以最大的和也不超过10000, sum数组开10001即可!
11 
12  int  main()
13  {
14       while  (scanf( " %d %d " & n,  & m)  !=  EOF)
15      {
16          arr[n];
17           for  ( int  i = 0 ; i < n; i ++ )
18          {
19              scanf( " %d " & arr[i]);
20          }
21          memset(sum,  0 sizeof (sum));
22           for  ( int  i = 0 ; i < n - 1 ; i ++ )
23          {
24               for  ( int  j = i + 1 ; j < n; j ++ )
25              {
26                  sum[arr[i]  +  arr[j]]  ++ ;
27              }
28          }
29           int  count  =   0 ;
30           for  ( int  j = 10000 ; j >= 0 ; j -- )
31          {
32               if  (sum[j])
33              {
34                   for  ( int  i = 0 ; i < sum[j]; i ++ )
35                  {
36                      count ++ ;
37                      count  ==   1   ?  printf( " %d " , j) : printf( " %d " , j);
38                       if  (count  ==  m) break ;
39                      printf( "   " );
40                  }
41              }
42               if  (count  ==  m)  break ;
43          }
44          printf( " \n " );
45      }
46  }
47 

你可能感兴趣的:(HDU 1280 前m大的数)