Cod sursa(job #2610355)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 4 mai 2020 19:19:23
Problema Aliens Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#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;
}