HDU 1280 앞 m 크기 의 기수 정렬

http://acm.hdu.edu.cn/showproblem.php?pid=1280
제목 의 대의:
N (N < = 3000) 개 수 를 드 리 겠 습 니 다.
생각:
수의 범위 가 제한 되 어 있 기 때문에 기수 정렬 을 한다.
출력 할 때 큰 것 부터 작은 것 까지 M 개 를 채 우 면 됩 니 다.
#include<cstdio>
const int MAXN=10000+2;
int data[3001];
int main()
{
	int n,m;
	while(~scanf("%d%d",&n,&m))
	{
		int sum[MAXN]={0};
		for(int i=0;i<n;i++)
		{
			scanf("%d",&data[i]);
			sum[ data[i] ]++;
		}

		for(int i=0;i<n;i++)
			for(int j=i+1;j<n;j++)			
				sum[ data[i]+data[j] ]++;
		
		int len=0;
		bool first=true;
		for(int i=MAXN-1;len<m;i--)
		{
			while(sum[i]!=0 && len<m)
			{
				sum[i]--;
				if(first)
					printf("%d",i);
				else 
					printf(" %d",i);
				len++;
				first=false;
			}
		}
		printf("
"); } return 0; }

좋은 웹페이지 즐겨찾기