Cod sursa(job #283478)

Utilizator irene_mFMI Irina Iancu irene_m Data 19 martie 2009 10:42:33
Problema Economie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream.h>
int v[1009],s[50009],n,sol[1009],nr,max,k;

void cit()
{
	int i;
	ifstream fin("economie.in");
	fin>>n;
	for(i=1;i<=n;i++)
	{
		fin>>v[i];
		if(v[i]>max)
			max=v[i];
	}
	fin.close();
}

void solv()
{
	int i,j,sw;
	nr=1;
	sol[1]=v[1];
	s[v[1]]=1;
	for(i=2;i<=n;i++)
	{
		sw=0;
		for(j=max;j>=1;j--)
			if(s[j])
			{
				if(v[i]%j==0)
					sw=1;
				if(j+v[i]<=max)
					s[j+v[i]]=1;
			}
		if(!sw)
		{
			nr++;
			sol[nr]=v[i];
		}
		s[v[i]]=1;
	}
}

void poz(int li,int ls)
{
	int i=li,j=ls,ii=0,jj=-1,c;
	while(i<j)
	{
		if(v[i]>v[j])
		{
			c=v[i]; v[i]=v[j]; v[j]=c;
			c=ii;
			ii=-jj;
			jj=-c;
		}
		i+=ii;
		j+=jj;
	}
	k=i;
}

void quick(int li,int ls)
{
	if(li<ls)
	{
		poz(li,ls);
		quick(li,k-1);
		quick(k+1,ls);
	}
}

void afis()
{
	int i;
	ofstream fout("economie.out");
	fout<<nr<<'\n';
	for(i=1;i<=nr;i++)
		fout<<sol[i]<<'\n';
	fout.close();
}

int main()
{
	cit();
	quick(1,n);
	solv();
	afis();
	return 0;
}