Cod sursa(job #109745)

Utilizator paliucaJean Luca Paliuca paliuca Data 25 noiembrie 2007 12:35:46
Problema Economie Scor 30
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 9-a Marime 0.88 kb
#include<stdio.h>
#include<algorithm>

using namespace std;
char a[50001];
int b[1001];

long n , i , j;
int max1;
long nr , sol[1001];
int main()
{
    freopen("economie.in","r",stdin);
    freopen("economie.out","w",stdout);
    
    scanf("%d",&n);
    for (i = 1 ; i <= n ; i++)
    {
        scanf("%d",&b[i]);
        if (b[i]>max1)
           max1 = b[i];
    }
    sort(b+1  , b + n);
    
    for (i = 1 ; i <= n ; i++)
    {
        if (a[b[i]] != 1)
        {
                    nr++;
                    sol[nr] = b[i];
        }
        for (j = 1 ; j <= max1 ; ++j)
        {
            if (j%b[i]==0)
               a[j] = 1;
            else
            if (a[j]==1 && j + b[i] <= max1)
               a[j+b[i]] = 1;
        }
    }
    printf("%ld\n",nr);
    for (i = 1 ; i <= nr ; i++)
        printf("%ld\n",sol[i]);
    return 0;
}