Pagini recente » Cod sursa (job #1063032) | Cod sursa (job #2743877) | Cod sursa (job #1462477) | Cod sursa (job #1611072) | Cod sursa (job #110161)
Cod sursa(job #110161)
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAXN 51
int N;
int x[MAXN], y[MAXN], z[MAXN];
#define MAXV3 18
#define MAXV5 12
int bst[MAXV3 * MAXN * 2][MAXV5 * MAXN * 2];
#define bst( i, j ) bst[ (i) + MAXV3 * MAXN ][ (j) + MAXV5 * MAXN ]
int rez[512];
inline void mul( int A[512], int B )
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
inline void print( int A[512] )
{
for (int i = A[0]; i; i--)
printf("%d", A[i]);
printf("\n");
}
int main()
{
freopen("aliens.in", "rt", stdin);
freopen("aliens.out", "wt", stdout);
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
int A, B;
scanf("%d %d", &A, &B);
for (; A % 2 == 0; A /= 2) x[i]++;
for (; A % 3 == 0; A /= 3) y[i]++;
for (; A % 5 == 0; A /= 5) z[i]++;
for (; B % 2 == 0; B /= 2) x[i]--;
for (; B % 3 == 0; B /= 3) y[i]--;
for (; B % 5 == 0; B /= 5) z[i]--;
}
for (int j = -N * MAXV3; j <= N * MAXV3; j++)
for (int k = -N * MAXV5; k <= N * MAXV5; k++)
bst(j, k) = -0x3f3f3f3f;
bst(0, 0) = 0;
for (int i = 0; i < N; i++)
{
int jL, jR, jD;
if (y[i] >= 0)
jL = N * MAXV3, jR = -N * MAXV3, jD = -1;
else
jL = -N * MAXV3, jR = N * MAXV3, jD = 1;
int kL, kR, kD;
if (z[i] >= 0)
kL = N * MAXV5, kR = -N * MAXV5, kD = -1;
else
kL = -N * MAXV5, kR = N * MAXV5, kD = 1;
for (int j = jL; j != jR; j += jD)
for (int k = kL; k != kR; k += kD)
{
if (bst(j, k) == -0x3f3f3f3f)
continue;
if (j + y[i] <= N * MAXV3 && k + z[i] <= N * MAXV5)
if (bst(j, k) + x[i] > bst(j + y[i], k + z[i]))
bst(j + y[i], k + z[i]) = bst(j, k) + x[i];
}
}
double MAX = -1; int MAXx = -1, MAXy = -1, MAXz = -1;
for (int Y = -N * MAXV3; Y <= N * MAXV3; Y++)
for (int Z = -N * MAXV5; Z <= N * MAXV5; Z++)
{
int X = bst(Y, Z);
if (X < 0 || Y < 0 || Z < 0) continue;
double val = log(2) * X + log(3) * Y + log(5) * Z;
if (val > MAX)
MAX = val,
MAXx = X,
MAXy = Y,
MAXz = Z;
}
rez[ rez[0] = 1 ] = 1;
for (; MAXx; MAXx--) mul(rez, 2);
for (; MAXy; MAXy--) mul(rez, 3);
for (; MAXz; MAXz--) mul(rez, 5);
print(rez);
return 0;
}