Pagini recente » Cod sursa (job #1992966) | Cod sursa (job #2205975) | Cod sursa (job #2732658) | Cod sursa (job #1739264) | Cod sursa (job #312606)
Cod sursa(job #312606)
#include<cstdio>
#include<math.h>
#include<algorithm>
#define Inf 2000
#define MAX_N 1010
using namespace std;
int bst[MAX_N][MAX_N];
int N, nr[3];
const int M = 500;
int s,s3,s5;
inline int desc(int a, int b) // a / b
{
int r;
for(r=0;a%b==0;a/=b,++r);
return r;
}
int MAX3, MIN3, MAX5, MIN5;
int rez[512];
inline void mul(int A[], int B) // A[] = A[] * B;
{
int t = 0,i;
for(i = 1; i<=A[0] || t; t/=10, ++i)
A[i] = (t += A[i] * B ) % 10;
A[0] = i-1;
}
int main()
{
freopen("aliens.in","r",stdin);
freopen("aliens.out","w",stdout);
scanf("%d",&N);
int i,x,y,j,k;
int beg1, end1, step1;
int beg2, end2, step2;
for(j=0;j<MAX_N;++j)
for(k=0;k<MAX_N;++k)
bst[j][k] = -Inf;
bst[M][M] = 0;
for(i=1;i<=N;++i)
{
scanf("%d%d",&x,&y);
nr[0] = desc(x,2) - desc(y,2);
nr[1] = desc(x,3) - desc(y,3);
nr[2] = desc(x,5) - desc(y,5);
if( nr[1] >= 0) { beg1 = MAX3; end1 = MIN3; step1 = -1; }
else { beg1 = MIN3; end1 = MAX3; step1 = 1;}
if(nr[2] >= 0) { beg2 = MAX5; end2 = MIN5; step2 = -1; }
else { beg2 = MIN5; end2 = MAX5; step2 = 1; }
for(x = beg1; x != end1 + step1; x += step1)
for(y = beg2; y != end2 + step2; y += step2)
{
if( bst[M+ x][M +y] == -Inf) continue;
if(bst[M+ x + nr[1]][M+ y + nr[2]] < bst[M+ x][M+ y] + nr[0])
{
bst[M+ x + nr[1]][M+ y + nr[2]] = bst[M + x][M+ y] + nr[0];
if(x + nr[1] < MIN3) MIN3 = x+nr[1];
if(x + nr[1] > MAX3) MAX3 = x+nr[1];
if(y + nr[2] < MIN5) MIN5 = y+nr[2];
if(y + nr[2] > MAX5) MAX5 = y+nr[2];
}
}
}
double l2 = log(2), l3 = log(3), l5=log(5);
int ii,jj;
double sol = 0.0, tmp;
for(x = 0; x<=MAX3; ++x)
for(y = 0; y<=MAX5; ++y)
{
if( bst[M+ x][M+ y] < 0) continue;
tmp = bst[M+ x][M+ y] * l2 + x * l3 + y * l5;
if( tmp > sol)
{
sol = tmp;
ii = x; jj = y;
}
}
rez[ rez[0] = 1 ] = 1;
for(i=1;i<=bst[ii+M][jj+M]; ++i) mul(rez,2);
for(i=1;i<=ii;++i) mul(rez,3);
for(i=1;i<=jj;++i) mul(rez,5);
// hai cu punctele!
for(i=rez[0];i>0;--i) printf("%d",rez[i]);
printf("\n");
return 0;
}