Cod sursa(job #132749)

Utilizator you_reheroMihai Gojinetchi you_rehero Data 6 februarie 2008 16:08:20
Problema Economie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>

#define nmax 50001

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

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

int part(int st, int dr)
{
 int 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(int st, int dr)
{
 int p;
 if (st<dr)
   {
    p=part(st,dr);
    qsort(st,p-1);
    qsort(p+1,dr);
   }
}

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