Cod sursa(job #101968)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 13 noiembrie 2007 22:43:24
Problema Economie Scor Ascuns
Compilator cpp Status done
Runda Marime 0.65 kb
#include <stdio.h>
#include <assert.h>
#include <algorithm>

using namespace std;

#define nmax 1024
#define lmax 50111
#define FOR(i,s,d) for(i=(s);i<(d);++i)

int n,m,B[nmax],A[nmax];
char viz[lmax];

int main()
{
	int i,j;
	assert(freopen("economie.in","r",stdin));
	freopen("economie.out","w",stdout);
	assert(scanf("%d",&n)==1);
	assert(n<=1000);
	assert(n>=1);
	FOR(i,0,n)
	{
		assert(scanf("%d",&A[i])==1);
		assert(A[i]<=50000);
		assert(A[i]>=1);		
	}
	sort(A,A+n);
	FOR(i,0,n)
	{
		if(viz[A[i]])
			continue;
		B[m++]=A[i];
		viz[A[i]]=1;
		FOR(j,A[i],lmax-A[i])
			viz[j+A[i]]|=viz[j];
	}
	printf("%d\n",m);
	FOR(i,0,m)
		printf("%d\n",B[i]);
	return 0;
}