Cod sursa(job #2112854)

Utilizator flibiaVisanu Cristian flibia Data 23 ianuarie 2018 22:14:28
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[1010], cnt, vf, sol[1010];
bool mark[50100], viz[50100];

int main(){
	in >> n;
	for(int i = 1; i <= n; i++){
		in >> a[i];
		if(!mark[a[i]]){
			mark[a[i]] = 1;
			cnt++;
		}	
	}
	sort(a + 1, a + n + 1);	
	for(int i = 1; i <= n && cnt; i++){
		if(a[i] == a[i - 1] || viz[a[i]])
			continue;
		viz[a[i]] = 1;
		if(mark[a[i]]){
			mark[a[i]] = 0;
			cnt--;
			viz[a[i]] = 1;
		}
		for(int j = 1; j <= 50000 - a[i]; j++)
			if(viz[j]){
				viz[j + a[i]] = 1;
				if(mark[j + a[i]]){
					mark[j + a[i]] = 0;
					cnt--;
				}
			}
		sol[++vf] = a[i];
	}
	out << vf << '\n';
	for(int i = 1; i <= vf; i++)
		out << sol[i] << '\n';
	return 0;
}