Cod sursa(job #1704941)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 19 mai 2016 17:24:07
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("economie.in");
ofstream fout("economie.out");
int a[1001],ap[50001];
bitset<50001>es;
int n,i,mx,fi,ok,j,j2;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)fin>>a[i],ap[a[i]]++,mx=max(mx,a[i]);
    for(n=0,i=1;i<=mx;i++)
        while(ap[i]--)a[++n]=i;
    memset(ap,0,sizeof(ap));
    for(i=1;i<=n;i++)ap[a[i]]=1;
    fi=n;
    for(i=1;i<=n;i++)
        for(j=1;j<=mx;j++)
        {
            if(j==a[i])
            {
                for(j2=a[i];j2<=mx;j2+=a[i])
                    if(es[j2]==0)
                    {
                        es[j2]=1;
                        if(ap[j2])fi--;
                        if(fi==0)
                        {
                            fout<<i<<"\n";
                            for(j=1;j<=i;j++)fout<<a[j]<<"\n";
                            return 0;
                        }
                    }
                continue;
            }
            if(es[j]==1 && j%a[i]>0)
                for(j2=j;j2<=mx;j2+=a[i])
                if(es[j2]==0)
                {
                        es[j2]=1;
                        if(ap[j2])fi--;
                        if(fi==0)
                        {
                            fout<<i<<"\n";
                            for(j=1;j<=i;j++)fout<<a[j]<<"\n";
                            return 0;
                        }

                }
        }
    return 0;
}