Cod sursa(job #132758)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 6 februarie 2008 16:25:10
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>

#define nmax 60000;

long n,v[nmax],sol[nmax],ct=0,i,j;
int s[nmax];

FILE*f=fopen("economie.in","r");
FILE*g=fopen("economie.out","w");

int part(long st, long dr)
{
 long i=st,j=dr,aux,s=-1;
 while (i<j)
   {
    if (v[i]>v[j]) 
      {
       aux=v[i];
       v[i]=v[j];
       v[j]=aux;
       s=-s;
      }
    if (s==1) i++;
         else j--;
   }
 return i;
}

void qsort(long st, long dr)
{
 long p;
 if (st<dr)
   {
    p=part(st,dr);
    qsort(st,p-1);
    qsort(p+1,dr);
   }
}

int main()
{
 fscanf(f,"%ld",&n);
 for (i=1; i<=n; i++)
   fscanf(f,"%ld",&v[i]);
 qsort(1,n);
 for (i=1; i<=n; i++)
   if (s[v[i]]==0)
     {
      ct++;
      sol[ct]=v[i];
      j=1;
      while (j*v[i]<v[n])
        {
         s[v[i]*j]=1;
         j++;
        }
      for (j=1; j<=v[n]-v[i]; j++)
        if (s[j]==1) s[j+v[i]]=1;
     } 
 fprintf(g,"%ld\n",ct);
 for (i=1; i<=ct; i++)
   fprintf(g,"%ld\n",sol[i]);
 return 0;
}