hdu1280

/*
分析:
    简单hash。
考虑m==0的情况,可以把15MS变成0MS。
n=0的情况可以不用理。


  摘:
    给定的N个整数序列, 两两求和,从大到小输出M个和
数。因为所有整数不超过5000,则相加不会超过10000,可
以用哈希解决。


                                         2012-04-25

*/



#include"stdio.h"
#include"string.h"
int main()
{
	int hash[10011];
	int i,l;
	int n,m;
	int num[3033];
	while(scanf("%d%d",&n,&m)!=-1)
	{
		memset(hash,0,sizeof(hash));


		if(n==0)
			continue;


		scanf("%d",&num[0]);
		for(i=1;i<n;i++)
		{
			scanf("%d",&num[i]);
			for(l=0;l<i;l++)	hash[num[i]+num[l]]++;
		}


		if(m==0)
			continue;


		for(i=10000;i>0;i--)
		{
			if(m==1)
				break;
			while(hash[i]!=0)
			{
				printf("%d ",i);
				hash[i]--;
				m--;
				if(m==1)
					break;
			}
		}
		i+=1;
		for(;i>0;i--)
		{
			if(hash[i]!=0)
			{
				printf("%d\n",i);
				break;
			}
		}
	}
	return 0;
}


你可能感兴趣的:(hdu1280)