Cod sursa(job #210278)

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

};
void set0(ALNR &a){a.c2=a.c3=a.c5=0;}
void 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 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%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))
    {
   group(solup,soldn,up[n-j],down[n-j]);
   aux=getnr(solup,soldn);
   if(aux)
     if(solu<aux)
         solu=aux;
     }
    }

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