[恢]hdu 1280
2011-12-25 11:25:29
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1280
题意:输入n个数,输出两两和的前m个。
mark:桶排序的经典应用。
代码:
# include <stdio.h>
# include <string.h>
int tab[10010] ;
int a[3010] ;
void output (int m)
{
int i, cnt = 0, flag = 0 ;
for (i = 10000 ; i >= 0 ; i --)
{
while (tab[i])
{
if (flag == 0) flag = 1 ;
else printf (" ") ;
printf ("%d", i) ;
tab[i]-- ;
cnt++ ;
if (cnt == m) return ;
}
}
}
int main ()
{
int i, j, n, m ;
while (~scanf ("%d%d", &n, &m))
{
for (i = 0 ; i < n ; i++)
scanf ("%d", &a[i]) ;
memset (tab, 0, sizeof (tab)) ;
for(i = 0 ; i < n ; i++)
for (j = i+1 ; j < n ; j++)
tab[a[i]+a[j]]++ ;
output (m) ;
puts ("") ;
}
return 0 ;
}