Cod sursa(job #109807)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 25 noiembrie 2007 12:44:15
Problema Economie Scor 50
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.74 kb
#include <stdio.h>
#include <set>
using namespace std;
set <int> v, k;
set <int>::iterator it, it2;
int vaz[50001],
	sol[1001];
int n, t, i, maxim;
int main()
{
	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);
	scanf("%d", &n);
	for (i = 1; i <= n; ++ i)
	{
		scanf("%d", &t);
		v.insert(t);
	}
	it = v.end();
	-- it;
	k.insert(0);
	maxim = *it;
	for (it = v.begin(); it!=v.end(); ++ it)
		if (!vaz[*it])
		{
			sol[++sol[0]] = *it;
			for (it2 = k.begin(); it2 != k.end(); ++ it2)
				if (!vaz[*it2+*it] && *it2+*it<=maxim)
				{
					k.insert(*it2+*it);
					vaz[*it2+*it] = 1;
				}
		}
	printf("%d\n", sol[0]);
	for (i = 1; i <= sol[0]; ++ i)
		printf("%d\n", sol[i]);
	return 0;
}