Nu aveti permisiuni pentru a descarca fisierul grader_test7.ok
Cod sursa(job #201546)
Utilizator | Data | 1 august 2008 13:37:45 | |
---|---|---|---|
Problema | Aliens | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.38 kb |
#include <stdio.h>
#include <algorithm>
#include <utility>
using namespace std;
#define NMAX 52
#define L2 150
#define L3 125
#define L5 100
int cd[L2*L3*L5][3];
int h[L2][L2][L2];
int a[NMAX][3];
int n,k,nk;
int pr[6];
long long p2[L2],p3[L3],p5[L5];
long long sol;
inline int sh(int x)
{
return x+32;
}
int main()
{
freopen("aliens.in","r",stdin);
freopen("aliens.out","w",stdout);
int i,j,x,y,z;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
memset(pr,0,sizeof(pr));
for (j=2;j*j<=x;j++)
for (;x%j==0;x/=j) pr[j]++;
if (x>1) pr[x]++;
for (j=2;j*j<=y;j++)
for (;y%j==0;y/=j) pr[j]--;
if (y>1) pr[y]--;
a[i][0]=pr[2];
a[i][1]=pr[3];
a[i][2]=pr[5];
fprintf(stderr,"%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
p2[0]=p3[0]=p5[0]=1;
for ( i=1;p2[i-1]*2< (long long)1<<40;i++ ) p2[i]=p2[i-1]*2;
for ( i=1;p3[i-1]*3< (long long)1<<40;i++ ) p3[i]=p3[i-1]*3;
for ( i=1;p5[i-1]*5< (long long)1<<40;i++ ) p5[i]=p5[i-1]*5;
nk=k=0;
sol=0;
for (i=1;i<=n;i++)
{
k=nk;
for (j=0;j<=k;j++)
{
x=cd[j][0]+a[i][0];
y=cd[j][1]+a[i][1];
z=cd[j][2]+a[i][2];
if (h[ sh(x) ][ sh(y) ][ sh(z) ]) continue;
h[ sh(x) ][ sh(y) ][ sh(z) ]=1;
nk++;
cd[nk][0]=x;cd[nk][1]=y;cd[nk][2]=z;
if ( (x>=0)&&(y>=0)&&(z>=0) )
{
sol=max(sol, (long long) p2[x]*p3[y]*p5[z] );
}
}
}
printf("%lld",sol);
return 0;
}