Cod sursa(job #301224)

Utilizator drag0s93Mandu Dragos drag0s93 Data 8 aprilie 2009 00:24:56
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;

#define IN "economie.in","r",stdin
#define OUT "economie.out","w",stdout
int N;
//vector<int> V(1005);
//vector<int> A(1004);
int V[1005] , A[100020] , B[1005];
int main()
{
	freopen(IN);
	freopen(OUT);
	scanf("%d",&N);
	int max = -20000000;
	for(int i = 1 ; i <= N ; ++i)
	{
		scanf("%d",&V[i]);
		if(max < V[i])	max = V[i];
	}
	sort(V + 1 , V + N + 1);
	int E = 1 , ban ;
	for(int i = 1 ; i <= N ; ++i)
	{
		ban = V[i];
		if(A[ban] == 0) {	B[E++] = V[i];  A[ban] = 1; }
		ban += V[i];
		while(ban <= max && A[ban] != 1)
		{
			A[ban] = 1;
			ban += V[i];
		}
		for(int p = 1 ; p <= max ; ++p)
			if(A[p + B[E - 1]] != 1 && A[p] == 1)	A[p + B[E - 1]] = 1;
	}
	printf("%d\n",E - 1);
	for(int i = 1 ; i <= E - 1 ; ++i)	printf("%d\n",B[i]);
	return 0;
}