Cod sursa(job #239859)

Utilizator Omega91Nicodei Eduard Omega91 Data 5 ianuarie 2009 23:30:05
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>

int main()
{
	const int NMAX = 1005, VMAX = 50005;
	int N, i, aux, v[NMAX], k = 0, x, j, vm, r = 0, rasp[NMAX];
	char pos[VMAX] = {};
	freopen("economie.in", "r", stdin);
	freopen("economie.out", "w", stdout);
	scanf("%d\n", &N);
	for (i = 0; i != N; ++i) {
		scanf("%d\n", &aux);
		pos[aux >> 3] |= 1 << (aux & 7);
	}
	for (i = 1; i <= VMAX; ++i) if (pos[i >> 3] & (1 << (i & 7)) ) v[k++] = i;
	memset(pos, 0, VMAX);
	vm = v[k - 1];
	for (i = 1; i <= vm; ++i) {
		for (j = 0; v[j] < i; ++j) {
			x = i - v[j];
			if (pos[x >> 3] & (1 << (x & 7)) ) {
				pos[i >> 3] |= 1 << (i & 7);
				break;
			}
		}
		if ( !(pos[i >> 3] & (1 << (i & 7))) && v[j] == i ) {
			pos[i >> 3] |= 1 << (i & 7);
			rasp[r++] = i;
		}
	}
	printf("%d\n", r);
	for (i = 0; i != r; ++i)
		printf("%d\n", rasp[i]);
	return 0;
}