Cod sursa(job #283473)

Utilizator irene_mFMI Irina Iancu irene_m Data 19 martie 2009 10:28:29
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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,l,aux,maxt;
	nr=1;
	sol[1]=v[1];
	l=v[1]; aux=l;
	while(l<=max)
	{
		s[l]=1;
		l+=aux;
	}
	for(i=2;i<=n;i++)
	{
		if(s[v[i]]==0)
		{
			nr++;
			sol[nr]=v[i];
		}
		maxt=max;
		for(j=maxt;j>=1;j--)
			if(s[j])
			{
				l=j+v[i]; aux=l;
				while(l<=max)
				{
					s[l]=1;
					l+=aux;
				}
			}
		l=v[i]; aux=l;
		while(l<=max)
		{
			s[l]=1;
			l+=aux;
		}
	}
}

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;
}