Cod sursa(job #414222)

Utilizator titusuTitus C titusu Data 9 martie 2010 20:44:09
Problema Economie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
using namespace std;
#include <fstream>
#include <iostream>
#include <algorithm>
#include <cassert>
int v[50005], n ,Max, c[1001], nc,a[1001];

int main(){
	ifstream fin("economie.in");
	fin>>n;
	for(int i=1;i<=n;++i){
		int x;
		fin>>x;
		a[i]=x;
		v[x]=1;
		if(x>Max)
			Max=x;
	}
	sort(a+1,a+n+1);
	if(a[1]==1){
		ofstream fout("economie.out");
		fout<<"1\n1\n";
		fout.close();
		return 0;
	}
	v[0]=2;
	for(int i=1;i<=n;++i)
		if(v[a[i]]==1){
			c[++nc]=a[i];
			for(int j=0;j<=Max;++j)
				if(v[j]==2)
					for(int k=1;j+a[i]*k<=Max;++k)
						v[j+a[i]*k]=2;
		}
	for(int i=1;i<=Max;++i)
		assert(v[i]!=1);
		
	ofstream fout("economie.out");
	fout<<nc<<"\n";
	for(int i=1;i<=nc;++i)
		fout<<c[i]<<"\n";
	fout.close();
	return 0;
}