Cod sursa(job #287971)

Utilizator andumMorie Daniel Alexandru andum Data 25 martie 2009 13:35:08
Problema Economie Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>

long n,v[1001],t[50001],vmax,i,j,min,ok;

void quick(long st, long dr)
{
 long i=st,j=dr,p=(i+j)/2;

 while (i<=j)
	{
	 while (v[i]<v[p]) i++;
	 while (v[j]>v[p]) j--;
	 if (i<=j)
		{
		 v[0]=v[i];
		 v[i]=v[j];
		 v[j]=v[0];
		 i++;
		 j--;
		}
	}
 if (st<j) quick(st,j);
 if (i<dr) quick(i,dr);
}

int main()
{
 freopen("economie.in","r",stdin);
 freopen("economie.out","w",stdout);
 scanf("%ld", &n);
 for (i=1;i<=n;i++)
	{
	 scanf("%ld", &v[i]);
	 if (v[i]>vmax) vmax=v[i];
	}
 quick(1,n);
 for (i=1;i<=n && !ok;i++)
	 {
	  ok=1;
	  if (!t[v[i]])
		t[v[i]]=2, min++;
	  for (j=v[i]+1;j<=vmax;j++)
		if (t[j-v[i]])
			t[j]=1, ok=0;
	 }
 printf("%ld\n", min);
 for (i=1;i<=vmax && min;i++)
	if (t[i]==2)
		printf("%ld\n", i), min--;
 return 0;
}