Cod sursa(job #109452)

Utilizator znakeuJurba Andrei znakeu Data 25 noiembrie 2007 11:10:17
Problema Aliens Scor 10
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.99 kb
#include <stdio.h>
#include <math.h>

FILE *in  = fopen("aliens.in","r");
FILE *out = fopen("aliens.out","w");

int v[51][4],n,max=0;

void serci(int p)
{
	int i=0,x,nc[4]={0,0,0,0};
	
	while (p)
	{
		if (p & 1)
		{
			nc[0]+=v[i][0];
			nc[1]+=v[i][1];
			nc[2]+=v[i][2];
		}
		i++;
		p/=2;
	}
	
	if (nc[0]>=0 && nc[1]>=0 && nc[2]>=0)
	{
		x=pow(2,nc[0])*pow(3,nc[1])*pow(5,nc[2]);
		if (x>max)
			max=x;
	}
}


int main()
{
	int i,x,y,wtf;
	
	fscanf(in,"%d",&n);
	for (i=0; i<n; i++)
	{
		fscanf(in,"%d%d",&x,&y);
		while (x%2==0)
		{
			v[i][0]++;
			x/=2;
		}
		while (y%2==0)
		{
			v[i][0]--;
			y/=2;
		}
		while (x%3==0)
		{
			v[i][1]++;
			x/=3;
		}
		while (y%3==0)
		{
			v[i][1]--;
			y/=3;
		}
		while (x%5==0)
		{
			v[i][2]++;
			x/=5;
		}
		while (y%5==0)
		{
			v[i][2]--;
			y/=5;
		}
	}
	
	wtf=pow(2,n);
	for (i=1; i<wtf; i++)
		serci(i);
	
	fprintf(out,"%d\n",max);
	
	fclose(in);
	fclose(out);
	
	
	return 0;
}