HDU 1280 前m大的数

HDU 1280 前m大的数

直接对n*(n-1)/2个数字排序,规模太大!注意到每个数字的取值范围并不大,两两之和最大不过10000,用time[i]记录数字i在和中出现的次数。
以下是我的代码:

#include < iostream >
#include
< algorithm >
#include
< cstdio >
using   namespace  std;
const   int  kMaxn  =   3001 ;
const   int  kMaxs  =   10001 ;

int  n,m,r[kMaxn],times[kMaxs];

int  main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/
    
    
while (cin >> n >> m)
    {
        
for ( int  i = 1 ;i <= n;i ++ )
            cin
>> r[i];
        
        fill(times,times
+ kMaxs, 0 );
        
for ( int  i = 2 ;i <= n;i ++ )
            
for ( int  j = 1 ;j < i;j ++ )
                times[r[i]
+ r[j]] ++ ;
        
        
bool  first = true ;
        
for ( int  i = kMaxs - 1 ,j = 0 ;j < &&  i >= 0 ;i -- )
            
while (times[i])
            {
                
if (first) first = false ;
                
else  cout << "   " ;
                cout
<< i;
                j
++ ;
                
if (j >= m)  break ;
                times[i]
-- ;
            }
        cout
<< endl;
    }
    
return   0 ;
}

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