Cod sursa(job #2112710)

Utilizator flibiaVisanu Cristian flibia Data 23 ianuarie 2018 19:42:30
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[1010], p, v, cnt;
bool viz[50100], f, mark[50100], sol[50100];

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