Cod sursa(job #137801)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 17 februarie 2008 14:52:54
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
int main(){
	int v[100000],w[100000],i,j,n,inj,gata,aux,k=0,ok,t,s;
	FILE*f=fopen("economie.in","r");
	FILE*g=fopen("economie.out","w");
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&v[i]);
	inj=n;
	while(inj>1){
		inj/=2;
		do {
			gata=1;
			for(i=1;i<=n-inj;i++)
				if(v[i]>v[i+inj]){
					aux=v[i];
					v[i]=v[i+inj];
					v[i+inj]=aux;
					gata=0;
				}
		}
		while(!gata);
	}
	w[++k]=v[1];
	for(i=2;i<=n;i++){
		ok=0;
		for(j=1;j<=k;j++){
			s=w[j];
			if(v[i]%s==0) {ok=1; while(v[i]%s==0) v[i]=v[i]/s; break;}
			for(t=i+1;t<=k;j++){
				s+=w[t];
				if(s==v[i]) { ok=1; while(v[i]%s==0) v[i]=v[i]/s; break;}
			}
			if(ok) break;
		}
		if(!ok) w[++k]=v[i];
	}
	fprintf(g,"%d\n",k);
	for(i=1;i<=k;i++)
		fprintf(g,"%d\n",w[i]);
	return 0;
}