Cod sursa(job #324778)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 17 iunie 2009 13:10:31
Problema Economie Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#define Nmax 1005
#define Vmax 50005

int bif[Vmax],a[Nmax],b[Nmax];
long i,j,n,max,nr,z,k;

void sort(long l,long r){
	long i,j,x,y;
   i=l; j=r; x=a[l +(r-l)/2];
   do{
   	while(a[i]<x) ++i;
      while(x<a[j]) --j;
      if(i<=j){
      	y=a[i]; a[i]=a[j]; a[j]=y;
         ++i; --j;
      }
   } while(i<=j);
   if(i<r) sort(i,r);
   if(l<j) sort(l,j);
}

int main(){
	freopen("economie.in","r",stdin);
   freopen("economie.out","w",stdout);
   scanf("%ld",&n);
   for(i=1;i<=n;++i) scanf("%ld",&a[i]);
   sort(1,n);
   bif[0]=1;
   for(i=1;i<=n;++i)
     if(bif[a[i]]==0){
     		b[++z]=a[i];
         for(k=0;k<=a[n];++k)
           if(bif[k] && !bif[k+a[i]]) bif[k+a[i]]=1;
     }

   printf("%ld\n",z);
   for(i=1;i<=z;++i) printf("%ld\n",b[i]);
   fclose(stdin); fclose(stdout);
   return 0;
}