Pagini recente » Cod sursa (job #340028) | Cod sursa (job #2830943) | Cod sursa (job #2014335) | Cod sursa (job #2173566) | Cod sursa (job #110144)
Cod sursa(job #110144)
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 64
int N;
int x[MAXN], y[MAXN], z[MAXN];
#define stare pair< int, pair<int, int> >
#define X first
#define Y second.first
#define Z second.second
#define make_stare(a, b, c) make_pair( (a), make_pair((b), (c)) )
vector< stare > S[2], tmp;
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]--;
}
int step = 0;
S[0].push_back( make_stare(0, 0, 0) );
for (int i = 0; i < N; i++, step ^= 1)
{
sort( S[step].begin(), S[step].end() );
S[step].resize( unique(S[step].begin(), S[step].end()) - S[step].begin() );
size_t a, b;
for (a = 0; a < S[step].size(); a++)
{
int ok = 1;
for (b = a + 1; b < S[step].size() && ok; b++)
if (S[step][b].X >= S[step][a].X && S[step][b].Y >= S[step][a].Y && S[step][b].Z >= S[step][a].Z)
ok = 0;
if (ok)
tmp.push_back( S[step][a] );
}
S[ 1 ^ step ] = tmp;
vector< stare > :: iterator it;
for (it = tmp.begin(); it != tmp.end(); it++)
S[ 1 ^ step ].push_back( make_stare( (*it).X + x[i], (*it).Y + y[i], (*it).Z + z[i] ) );
}
double MAX = -1; int MAXx = -1, MAXy = -1, MAXz = -1;
vector< stare > :: iterator it;
for (it = S[ step ].begin(); it != S[ step ].end(); it++)
{
if ((*it).X < 0 || (*it).Y < 0 || (*it).Z < 0) continue;
double val = log(2) * (*it).X + log(3) * (*it).Y + log(5) * (*it).Z;
if (val > MAX)
MAX = val,
MAXx = (*it).X,
MAXy = (*it).Y,
MAXz = (*it).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;
}