Cod sursa(job #186571)

Utilizator savimSerban Andrei Stan savim Data 28 aprilie 2008 12:48:30
Problema Economie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>

int m,i,j,k,n,gas,min,max;
int a[1001],b[1001],fol[50001];

int main()
{

    freopen("economie.in","r",stdin);
    freopen("economie.out","w",stdout);

    scanf("%d",&n);
    for (i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        fol[a[i]]=1;
    }

    for (i=1; i<=n-1; i++)
        for (j=i+1; j<=n; j++)
        if (a[i]>a[j])
        {
            k=a[i];
            a[i]=a[j];
            a[j]=k;
        }
        
    min=a[1];max=a[n];

    m=1;b[m]=a[1];
    for (i=2; i<=n; i++)
    {
        gas=0;
        for (j=1; j<=m; j++)
            if (b[j]==a[i])
            {
               gas=1;
               break;               
            }
        if (!gas) { m++;b[m]=a[i];}
    }

    for (i=1; i<=n; i++)
        a[i]=b[i];
    n=m;
    
    for (i=1; i<=n; i++)
    {
        for (j=min; j<=max; j++)
        if (fol[j]==1)
        {
           int t=1;
           while (j+t*a[i]<=max)
           {
                 fol[j+t*a[i]]++;
                 t++;
           }
        }
    }
    m=0;
    for (i=1; i<=n; i++)
    if (fol[a[i]]==1)
    {
       m++;
       b[m]=a[i];
    }
    
    printf("%d\n",m);
    for (i=1; i<=m; i++)
        printf("%d\n",b[i]);

    return 0;
}