Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Borderou de evaluare (job #3038977) | Cod sursa (job #2610355)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aliens.in");
ofstream fout("aliens.out");
const short nmax = 50;
const short l3 = nmax * 18;
const short l5 = nmax * 12;
const short inf = -32767;
short n, x, y, v[300];
short dp[2][l3 + l3 + 5][l5 + l5 + 5];
int getPower(int a, int b)
{
int contor = 0;
while (a % b == 0)
{
++contor;
a = a / b;
}
return contor;
}
void inmul(int a)
{
int t = 0;
for (int i = 1; i <= v[0]; ++i)
{
v[i] = v[i] * a + t;
t += v[i] / 10;
v[i] %= 10;
}
while (t)
{
v[++v[0]] = t % 10;
t /= 10;
}
}
int main()
{
fin >> n;
for (int i = -l3; i <= l3; ++i)
{
for (int j = -l5; j <= l5; ++j)
{
dp[0][i + l3][j + l5] = inf;
}
}
dp[0][l3][l5] = 0;
for (int i = 1; i <= n; ++i)
{
fin >> x >> y;
short p2 = getPower(x, 2) - getPower(y, 2);
short p3 = getPower(x, 3) - getPower(y, 3);
short p5 = getPower(x, 5) - getPower(y, 5);
for (int j = -l3; j <= l3; ++j)
{
for (int k = -l5; k <= l5; ++k)
{
dp[i % 2][j + l3][k + l5] = inf;
if (dp[1 - i % 2][j + l3][k + l5] != inf)
{
dp[i % 2][j + l3][k + l5] = dp[1 - i % 2][j + l3][k + l5];
}
if (j - p3 >= -l3 && k - p5 >= -l5 && dp[1 - i % 2][j - p3 + l3][k - p5 + l5] != inf)
{
if (p2 + dp[1 - i % 2][j - p3 + l3][k - p5 + l5] > dp[i % 2][j + l3][k + l5])
{
dp[i % 2][j + l3][k + l5] = p2 + dp[1 - i % 2][j - p3 + l3][k - p5 + l5];
}
}
}
}
}
fout << 30;
fin.close();
fout.close();
return 0;
}