Cod sursa(job #2557340)

Utilizator As932Stanciu Andreea As932 Data 25 februarie 2020 18:57:10
Problema Economie Scor 20
Compilator cpp-64 Status done
Runda mf_boss2 Marime 1.39 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 50002
using namespace std;
ifstream fin("economie.in");
ofstream fout("economie.out");

int n,val;
int v[nmax];
vector <int> rasp;

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];

    sort(v+1,v+n+1);

    if(v[1]==1)
    {
        fout<<"1\n1";
        return 0;
    }

    for(int i=1;i<=n;i++)
    {
        if(i==1)
            rasp.push_back(v[i]);
        else
        {
            bool ok=false;
            int sum=0;
            for(int j=0;j<rasp.size() && !ok;j++)
            {
                int r=v[i]%rasp[j];
                sum+=rasp[j];

                if(v[i]==sum)
                    ok=true;

                if(r==0)
                    ok=true;

                int st=0,dr=rasp.size();
                dr--;
                while(st<=dr && !ok)
                {
                    int mij=(st+dr)/2;
                    if(rasp[mij]==r)
                        ok=true;
                    else if(rasp[mij]<r)
                        st=mij+1;
                    else
                        dr=mij-1;
                }
            }

            if(ok==false)
                rasp.push_back(v[i]);
        }
    }

    fout<<rasp.size()<<"\n";
    for(int i=0;i<rasp.size();i++)
        fout<<rasp[i]<<"\n";

    return 0;
}