Cod sursa(job #286800)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 24 martie 2009 10:35:54
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
int v[1001],i,n,j,k;
int s[50001];
void divid(int st, int dr)
{
int aux,p,i,j;
i=st;
j=dr;
p=v[(st+dr)/2];
while (i<=j)
{
    while (v[i]<p) i++;
    while (v[j]>p) j--;
    if (i<=j)
	 {
	 aux=v[i];
	 v[i]=v[j];
	 v[j]=aux;
	 i++;
	 j--;
	 }
}
if (st<j) divid(st,j);
if (dr>i) divid(i,dr);
}
int main()
{
freopen("economie.in","r",stdin);
freopen("economie.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
   scanf("%d", &v[i]);
divid(1,n);
k=0;
for(i=1;i<=n;i++)
    {
    if (s[v[i]]==0) {
	  s[v[i]]=2;
	  k++;
	 }
    for (j=v[i]+1;j<=v[n];j++)
      if (s[j-v[i]]>0) s[j]=1;
    }
   printf("%d\n",k);
   for (i=1;i<=v[n];i++)
     if (s[i]==2) printf("%d\n",i);
   return 0;
}