Cod sursa(job #184584)

Utilizator AlxCojocaru Alexandru Alx Data 23 aprilie 2008 21:30:15
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
int a[1000],val[50001],n,min;
void qsort(int li,int ls)
{
    if (ls-li>0)
    {
        int i1=0,j1=-1,i=li,j=ls;
        while (i<j)
        {
            if (a[i]>a[j])
            {
                int aux=a[i];
                a[i]=a[j];
                a[j]=aux;
                aux=i1;
                i1=-j1;
                j1=-aux;
            }
            i+=i1;
            j+=j1;
        }
        qsort(li,i-1);
        qsort(i+1,ls);
    }
}
int main()
{
    freopen("economie.in","r",stdin);
    freopen("economie.out","w",stdout);
    scanf("%d\n",&n);
    int i,j;
    for (i=0;i<n;i++)
        scanf("%d\n",&a[i]);
    qsort(0,n-1);
    min=n;
    for (i=0;i<n;i++)
    {
        if (val[a[i]])
        {
            a[i]=-1;
            min--;
        }
        else
        {
            val[a[i]]=1;
            for (j=1;j+a[i]<=50000;j++)
                if (val[j])
                    val[j+a[i]]=1;
        }
    }
    printf("%d\n",min);
    for (i=0;i<n;i++)
        if (a[i]!=-1)
            printf("%d\n",a[i]);
    return 0;
}