Cod sursa(job #210292)

Utilizator SheepBOYFelix Liviu SheepBOY Data 27 septembrie 2008 11:26:20
Problema Aliens Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include<stdio.h>
#include<math.h>
struct ALNR{
int c2,c3,c5;

};
void set0(ALNR &a){a.c2=a.c3=a.c5=0;}
int group(ALNR &solup,ALNR &soldn,ALNR a,ALNR b)
{
solup.c2+=a.c2;
solup.c3+=a.c3;
solup.c5+=a.c5;
soldn.c2+=b.c2;
soldn.c3+=b.c3;
soldn.c5+=b.c5;

int rez=0;
  if(soldn.c2<=solup.c2)
  if(soldn.c3<=solup.c3)
  if(soldn.c5<=solup.c5)
   {
    solup.c2-=soldn.c2;
    solup.c3-=soldn.c3;
    solup.c5-=soldn.c5;
   rez=pow(2,solup.c2)*pow(3,solup.c3)*pow(5,solup.c5);
}
//int getnr(ALNR up,ALNR dow)
//{int rez=0;
//  if(dow.c2<=up.c2)
//  if(dow.c3<=up.c3)
//  if(dow.c5<=up.c5)
//   {
//    up.c2-=dow.c2;
//    up.c3-=dow.c3;
//    up.c5-=dow.c5;
//   rez=pow(2,up.c2)*pow(3,up.c3)*pow(5,up.c5);
//   }

return rez;
}
void decomp(int nr,ALNR &a)
 {
 set0(a);
 while(!(nr%30))
 {
	 a.c2++;
	 a.c3++;
	 a.c5++;
	 nr/=30;
 }
 while(!(nr%10))
 {
	a.c2++; 
	a.c5++;
	nr/=10;
 }
 while(!(nr%6))
 {
	a.c2++; 
	a.c3++;
	nr/=6;
 
 }
  while(!(nr%15))
 {
	a.c5++; 
	a.c3++;
	nr/=15;
 
 }
 while(!(nr%2))
  {
  a.c2++;
  nr/=2;
  }
 while(!(nr%3))
  {
  a.c3++;
  nr/=3;
  }
 while(!(nr%5))
  {
  a.c5++;
  nr/=5;
  }
 }
int vect[1000];
int main()
{
 int n,x,y;
 char c;
 freopen("aliens.in","r",stdin);
 freopen("aliens.out","w",stdout);
 ALNR up[1000],down[1000];
 scanf("%d",&n);
  for(int i=0;i<n;i++)
   {
   scanf("%d%c%d",&x,&c,&y);
   decomp(x,up[i]);
   decomp(y,down[i]);
   }
   ALNR solup,soldn;int aux,solu=0;
 for(long i=0;i<((2<<n)-1);i++)
  {
  for(int j=0;j<n;j++)
   {
   if(i&(1u<<j))
    {
   aux=group(solup,soldn,up[n-j-1],down[n-j]);
   //aux=getnr(solup,soldn);
   if(aux)
     if(solu<aux)
         solu=aux;
     }
    }

  set0(solup);
  set0(soldn);
   }
   printf("%d",solu);
  return 0;
}