Cod sursa(job #2501208)

Utilizator FrostfireMagirescu Tudor Frostfire Data 29 noiembrie 2019 11:24:38
Problema Aliens Scor 10
Compilator cpp-64 Status done
Runda simu Marime 1.6 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("aliens.in");
ofstream g("aliens.out");

long long n, sol;
pair <long long, long long> v[55];
struct date
{   long long p2, p3, p5;
};

long long lgput(long long a, long long n)
{   long long P = 1;
    for(int i=1; i<=n; i++) P = P * a;
    return P;
}

int main()
{
    f >> n;
    for(int i=1; i<=n; i++) f >> v[i].first >> v[i].second;
    for(long long mask=1; mask<(1<<n); mask++)
        {   date numi, numa;
            numi.p2 = numi.p3 = numi.p5 = numa.p2 = numa.p3 = numa.p5 = 0;
            for(int i=0; i<n; i++)
                if(mask & (1 << i))
                    {   long long a = v[i+1].first, b = v[i+1].second;
                        //cout << a << ' ' << b << '\n';
                        while(a % 2 == 0) numa.p2++, a /= 2;
                        while(a % 3 == 0) numa.p3++, a /= 3;
                        while(a % 5 == 0) numa.p5++, a /= 5;

                        while(b % 2 == 0) numi.p2++, b /= 2;
                        while(b % 3 == 0) numi.p3++, b /= 3;
                        while(b % 5 == 0) numi.p5++, b /= 5;
                    }
            if(numa.p2 >= numi.p2 && numa.p3 >= numi.p3 && numa.p5 >= numi.p5)
                {   long long put2 = numa.p2 - numi.p2, put3 = numa.p3 - numi.p3, put5 = numa.p5 - numi.p5;
                    long long nr1 = 2, nr2 = 3, nr3 = 5;
                    long long nr = lgput(nr1, put2) * lgput(nr2, put3) * lgput(nr3, put5);
                    sol = max(sol, nr);
                }
        }
    g << sol << '\n';
    return 0;
}