Cod sursa(job #300644)

Utilizator mottyMatei-Dan Epure motty Data 7 aprilie 2009 16:17:48
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#define N 1001
#define M 50001

int v[N],pz,n,ap[M],cit[M],val_max,q[N];

void fcit()
{
	int x;
	scanf("%d",&n);
	for( int i=0 ; i<n ; ++i )
	{
		scanf("%d",&x);
		cit[x]++;
		if(x>val_max)
			val_max=x;
	}
	for( int i=1 ; i<=val_max ; ++i )
		while( cit[i]-- )
			v[pz++]=i;
	pz=0;
}

void calc()
{
	q[pz++]=v[0];
	for( int j=1 ; v[0]*j<=v[n-1] ; ++j )
		ap[v[0]*j]=1;
	for( int i=1 ; i<n ; ++i )
		if( ap[v[i]]==0 )
		{
			q[pz++]=v[i];
			for( int j=0 ; j+v[i]<v[n-1] ; ++j )
				if( ap[j] )
					ap[ j + v[i] ]=1;
		}
	printf("%d\n",pz);
	for(int i=0 ; i<pz ; ++i )
		printf("%d\n",q[i]);
}

int main()
{
	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);
	fcit();
	calc();
	return 0;
}