Cod sursa(job #288458)

Utilizator alecmanAchim Ioan Alexandru alecman Data 25 martie 2009 20:02:37
Problema Economie Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

#define INPUT "economie.in"
#define OUTPUT "economie.out"
#define pb push_back

const int NMAX = 1001;
const int VMAX = 50001;

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

int N;
vector<int> G;
int V[ NMAX ], Valid[ VMAX ];

void readData()
{
  int X;

  fscanf(fin, "%d", &N);

  for(int i = 1; i <= N; ++i)
    fscanf(fin, "%d", &V[ i ]);
}

void solve()
{
  int cont = 0;

  vector<int>::iterator it;

  for(int j = 1; j < VMAX; ++j)
    if(j % V[ 1 ] == 0) Valid[ j ] = 1;
  ++cont;
  G.pb(V[ 1 ]);

  for(int i = 2; i <= N; ++i)
  {
    if(!Valid[ V[ i ] ]){
      ++cont;
      G.pb(V[ i ]);
      Valid[ V[ i ] ] = 1;
      for(int j = 1; j < VMAX; ++j)
        if(Valid[ j ]) Valid[ j + V[ i ] ] = 1;
    }
  }

  fprintf(fout, "%d\n", cont);
  for(it = G.begin(); it != G.end(); ++it)
    fprintf(fout, "%d\n", *it);
}

int main()
{
  readData();

  sort(V+1, V+N+1);

  solve();

  fclose(fin);
  fclose(fout);

  return 0;
}