Pagini recente » Cod sursa (job #2238436) | Cod sursa (job #3209754) | Cod sursa (job #2926052) | Cod sursa (job #2372058) | Cod sursa (job #372884)
Cod sursa(job #372884)
#include <cstdio>
#include <cstring>
#include <cmath>
#define file_in "aliens.in"
#define file_out "aliens.out"
#define Baza 10000
#define Inf 0x3f3f3f3f
#define Nmax 1010
#define l2 log(2)
#define l3 log(3)
#define l5 log(5)
int n,nr2,nr3,nr5;
int d[Nmax][Nmax];
int sol[Nmax];
int a,b,dd;
int nr(int x, int k)
{
int nrr=0;
while(x%k==0)
{
nrr++;
x/=k;
}
return nrr;
}
void inm(int a[], int cif)
{
int i,t=0;
for (i=1;i<=a[0]||t;++i,t/=Baza)
a[i]=(t=a[i]*cif)%Baza;
a[0]=i-1;
}
void write(int a[])
{
int i;
printf("%d", a[a[0]]);
for (i=a[0]-1;i>=1;--i)
printf("%.04d",a[i]);
}
inline int max(int a, int b) { return a>b?a:b; }
inline int min(int a, int b) { return a<b?a:b; }
inline int abs(int a) { return a>=0?a:-a; }
int main()
{
int i,j,k,indi,indj;
double Max;
int start3,start5,m3,m5,stop3,stop5;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
for (i=0;i<=Nmax;++i)
for (j=0;j<=Nmax;++j)
d[i][j]=-Inf;
d[Nmax/2][Nmax/2]=0;
scanf("%d", &n);
for (i=1;i<=n;++i)
{
scanf("%d %d", &a, &b);
nr2=nr(a,2)-nr(b,2);
nr3=nr(a,3)-nr(b,3);
nr5=nr(a,5)-nr(b,5);
dd=max(abs(nr3),abs(nr5));
if (nr3>=0)
{
start3=dd;
stop3=-dd+Nmax/2;
m3=-1;
}
else
{
start3=-dd;
stop3=dd+Nmax/2;
m3=1;
}
if (nr5>=0)
{
start5=dd;
stop5=-dd+Nmax/2;
m5=-1;
}
else
{
start5=-dd;
stop5=dd+Nmax/2;
m5=1;
}
for (j=start3;j<=stop3;j+=m3)
for (k=start5;k<=stop5;k+=m5)
if (d[j][k]!=-Inf)
d[j+nr3][k+nr5]=max(d[j+nr3][k+nr5],d[j][k]+nr2);
}
Max=0;
indi=indj=0;
for (i=0;i<Nmax;++i)
for (j=0;j<Nmax;++j)
{
if (d[i][j]==-Inf)
continue;
if (i-Nmax/2<0 || j-Nmax/2<0) continue;
if (d[i][j]<0) continue;
if (d[i][j]*l2+(i-Nmax/2)*l3+(j-Nmax/2)*l5>Max)
{
indi=i;
indj=j;
Max=d[i][j]*l2+(i-Nmax/2)*l3+(j-Nmax/2)*l5;
}
}
sol[0]=sol[1]=1;
//printf("%d\n", d[indi][indj]);
for (i=1;i<=d[indi][indj];++i)
inm(sol,2);
for (i=1;i<=indi-Nmax/2;++i)
inm(sol,3);
for (i=1;i<=indj-Nmax/2;++i)
inm(sol,5);
write(sol);
fclose(stdin);
fclose(stdout);
return 0;
}