Cod sursa(job #1041614)

Utilizator mvcl3Marian Iacob mvcl3 Data 25 noiembrie 2013 22:49:22
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <algorithm>

#define in "economie.in"
#define out "economie.out"
#define Max_Size 1009
#define Max_Val 50009

std :: ifstream f(in);
std :: ofstream g(out);

int N, Maxim;

std :: vector < int > V, Sol;
std :: bitset < Max_Val > B;

inline void Read_Data()
{
    f >> N;
    V.resize(N);

    for(int i = 0; i < N; ++i)
    {
        f >> V[i];
        Maxim = std :: max(Maxim, V[i]);
    }
}

inline void Solve()
{
    std :: sort(V.begin(), V.end());

    for(int i = 0; i < N; ++i)
        if( !B[ V[i] ] )
        {
            B[ V[i] ] = 1;
            Sol.push_back(V[i]);

            for(int j = 0; j + V[i] <= Maxim; ++j)
                if( !B[j] )     B[ j + V[i] ] = 1;
        }
}

inline void Write_Data()
{
    g << Sol.size() << '\n';

    for(int i = 0; i < Sol.size(); ++i) g << Sol[i] << '\n';
}

int main()
{
    Read_Data();
    Solve();
    Write_Data();

    g.close();
    return 0;
}