Cod sursa(job #184008)

Utilizator coderninuHasna Robert coderninu Data 22 aprilie 2008 21:17:31
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define Nmax 1001

int v[Nmax], i, j, N, rez[Nmax], k;
short uz[50001];

inline void swap(int &x, int &y) { int temp = x; x = y; y = temp; }

void sort(int p, int q)
{
	int st = p, dr = q, m = v[(st+dr) >> 1];
	while (st < dr)
	{
		while (v[st] < m) st++;
		while (v[dr] > m) dr--;
		if (st<=dr) swap(v[st++],v[dr--]);
	}
	if (st < q) sort(st,q);
	if (dr > p) sort(p,dr);
}

int main()
{
	freopen("economie.in", "r", stdin);
	for (scanf("%d\n", &N), i = 1; i<=N; i++ ) scanf("%d\n", v+i);
	sort(1,N);
	for (i = 1; i<=N; i++)
		if (!uz[v[i]])
		{
			rez[++rez[0]] = v[i];
			uz[v[i]] = 1;
			for (j = 1; j<=v[N] - v[i]; j++)
				if (uz[j])
					uz[j+v[i]] = 1;

		}
	for (freopen("economie.out", "w", stdout), printf("%d\n", rez[0]), i = 1; i<=rez[0]; i++)
		printf("%d\n", rez[i]);
	return 0;
}