Cod sursa(job #207039)

Utilizator irene_mFMI Irina Iancu irene_m Data 11 septembrie 2008 12:43:22
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream.h>
int x[1001],a[1001],a1[5000],nr1,n,nr,i,j,aux,b,i1,j1,c,k,sw;
long s;

void poz(int li, int ls)
 {i1=0;
   j1=-1;
   i=li;
   j=ls;
   while(i<j)
    {if(x[i]<x[j])
      {c=x[j];
       x[j]=x[i];
       x[i]=c;
       c=i1;
       i1=-j1;
       j1=-c;
       }
      i+=i1;
      j+=j1;
    }
   k=i;
  }

void quick(int li, int ls)
 {if(li<ls)
  {poz(li,ls);
   quick(li,k-1);
   quick(k+1,ls);
   }
  }


void minim()
 {nr++;
  a[nr]=x[n];
  x[n]=0;
  n--;
  }

void suma()
 {s=a[nr];
  nr1++;
  a1[nr1]=s;
  s+=a[1];
  nr1++;
  a1[nr1]=s;
  for(j=2;j<=nr-1;j++)
   {s+=a[j];
    nr1++;
    a1[nr1]=s;
    nr1++;
    a1[nr1]=a[nr]+a[j];
    }
  }


int main()
{
 ifstream fin("economie.in");
 fin>>n;
 for(i=1;i<=n;i++)
  fin>>x[i];
 fin.close();
 quick(1,n);
 minim();
 ofstream fout("economie.out");
 if(a[nr]==1)
  fout<<"1 1";
 else
 {
  suma();
  i=1;
  while(i<=n)
   {sw=1;
    for(j=1;j<=nr;j++)
     if(x[i]%a[j]==0)
      {sw=0; break;}
    if(sw!=0)
     for(j=1;j<=nr1;j++)
      if(x[i]%a1[j]==0)
       {sw=0; break;}
    if(sw==1)
     {minim(); suma();}
    else
     i++;
    }
  fout<<nr<<'\n';
  for(i=1;i<=nr;i++)
   fout<<a[i]<<" ";
  }
 return 0;
}