Pagini recente » Cod sursa (job #161607) | Cod sursa (job #2535577) | Cod sursa (job #2634354) | Cod sursa (job #1783904) | Cod sursa (job #2051111)
#include<fstream>
#include<vector>
#include<cmath>
using namespace std;
int n, i, ii, j, min5, min3, u3, u5, sum3, sum5, x, y, max5, max3, p3, p5;
double sol, val;
int r[10000];
vector<int> d[1500];
struct str{
int a, b, c;
};
str v[55];
ifstream fin("aliens.in");
ofstream fout("aliens.out");
int imp(int x, int p){
int e = 0;
while(x % p == 0){
e++;
x /= p;
}
return e;
}
void mult(int x){
int i, t = 0;
for(i = 1; i <= r[0]; i++){
r[i] = r[i] * x + t;
t = r[i] / 10;
r[i] %= 10;
}
while(t != 0){
r[ ++r[0] ] = t % 10;
t /= 10;
}
}
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> x >> y;
v[i].a = imp(x, 2) - imp(y, 2);
v[i].b = imp(x, 3) - imp(y, 3);
v[i].c = imp(x, 5) - imp(y, 5);
if(v[i].b < 0){
min3 -= v[i].b;
}
else{
max3 += v[i].b;
}
if(v[i].c < 0){
min5 -= v[i].c;
}
else{
max5 += v[i].c;
}
}
for(i = 0; i <= min5 + max5; i++){
for(j = 0; j <= min3 + max3; j++){
d[i].push_back(-1000000);
}
}
d[min5][min3] = 0;
for(ii = 1; ii <= n; ii++){
if(v[ii].c > 0){
for(i = u5 + min5; i >= p5 + min5; i--){
if(v[ii].b > 0){
for(j = u3 + min3; j >= p3 + min3; j--){
d[i + v[ii].c ][j + v[ii].b ] = max(d[i + v[ii].c ][j + v[ii].b ], d[i][j] + v[ii].a);
}
}
else{
for(j = p3 + min3; j <= u3 + min3; j++){
d[i + v[ii].c ][j + v[ii].b ] = max(d[i + v[ii].c ][j + v[ii].b ], d[i][j] + v[ii].a);
}
}
}
}
else{
for(i = p5 + min5; i <= u5 + min5; i++){
if(v[ii].b > 0){
for(j = u3 + min3; j >= p3 + min3; j--){
d[i + v[ii].c ][j + v[ii].b ] = max(d[i + v[ii].c ][j + v[ii].b ], d[i][j] + v[ii].a);
}
}
else{
for(j = p3 + min3; j <= u3 + min3; j++){
d[i + v[ii].c ][j + v[ii].b ] = max(d[i + v[ii].c ][j + v[ii].b ], d[i][j] + v[ii].a);
}
}
}
}
u3 = max(u3, u3 + v[ii].b);
p3 = min(p3, p3 + v[ii].b);
u5 = max(u5, u5 + v[ii].c);
p5 = min(p5, p5 + v[ii].c);
}
for(i = min5; i <= min5 + max5; i++){
for(j = min3; j <= min3 + max3; j++){
if(d[i][j] >= 0){
val = log(2) * d[i][j] + log(3) * (j - min3) + log(5) * (i - min5);
if(i - min5 == 16 && j - min3 == 78){
int abc = 0;
}
if(val > sol){
sol = val;
x = i;
y = j;
}
}
}
}
r[0] = r[1] = 1;
for(i = 1; i <= d[x][y]; i++){
mult(2);
}
x -= min5;
y -= min3;
for(i = 1; i <= y; i++){
mult(3);
}
for(i = 1; i <= x; i++){
mult(5);
}
for(i = r[0]; i >= 1; i--){
fout<< r[i];
}
fout<<"\n";
return 0;
}