Cod sursa(job #287984)

Utilizator stefynr8Space Monkey stefynr8 Data 25 martie 2009 13:55:45
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>

int n,i,j,ok,k,v[100],t[100],max;

void quick(int st, int dr)
{
 int i=st,j=dr;
 int p;
 p=(i+j)/2;
 if(i>j) return;
 while (i<=j)
	{
	while(v[i]<v[p]) i++;
	while(v[j]<v[p]) j--;
	if(i<=j){
		 v[0]=v[1];
		 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("%d", &n);
 for(i=1;i<=n;i++)
	{
	scanf("%d", &v[i]);
	if(v[i]>max) max=v[i];
	}

 k=n;
 do
 {
  ok=1;
  for(i=1;i<k;i++)
     if(v[i]<v[i+1]){
		     ok=0;
		     v[0]=v[i];
		     v[i]=v[i+1];
		     v[i+1]=v[i];
		     }
  k--;

  }while(ok);


 for(i=1;i<=n && ok;i++)
    {
    ok=1;
    if(v[i]==i && t[i]==0){
			   t[i]=2;
			   k++;
			   }

    for(j=i;j<=max;j++)
	if(t[j-v[i]]!=0){
			 t[j]=1;
			 ok=0;
			}
    }

 printf("%d\n", k);
 for(i=1;i<=max;i++)
    if(t[i]==2) printf("%d ", t[i]);



return 0;
}