Cod sursa(job #1898351)

Utilizator SenibelanMales Sebastian Senibelan Data 1 martie 2017 22:47:52
Problema Economie Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define NMAX 50005

using namespace std;

ifstream in("economie.in");
ofstream out("economie.out");

int N, contor;
int v[NMAX];
int S[NMAX * 1000];
int maxi, mini;

vector <int> sol;


void Read(){
    in >> N;
    for(int i = 1; i <= N; ++i)
        in >> v[i];
}

void Solve(){
    sort(v + 1, v + N + 1);
    maxi = v[N];
    mini = v[1];
    for(int i = 1; i <= N; ++i){
        if(!S[v[i]]){
            sol.push_back(i);
            for(int j = mini; j <= maxi - v[i]; ++j){
                if(S[j])
                    S[j + v[i]] = 1;
                else if(j % v[i] == 0 && j >= v[i])
                    S[j] = 1;
            }
        }
    }
}

void Print(){
    int sz = sol.size();
    out << sz << "\n";
    for(int i = 0; i < sz; ++i)
        out << v[sol[i]] << " ";
    out << "\n";
}

int main()
{
    Read();
    Solve();
    Print();
    return 0;
}