Cod sursa(job #2515873)

Utilizator betybety bety bety Data 29 decembrie 2019 17:48:24
Problema Aliens Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("aliens.in");
ofstream out("aliens.out");
const int lim=52;
struct fractie
{
    int c2,c3,c5;
}v[lim];
long long int pow2(int exp)
{
    long long int prod=1;
    for(int i=1;i<=exp;++i)
        prod*=2;
    return prod;
}
long long int p2[53];
long long int p3[43];
long long int p5[23];
vector<int> f;
int main()
{
    p2[0]=1;
    p3[0]=1;
    p5[0]=1;
    for(int i=1;i<=51;++i)
        p2[i]=2*p2[i-1];
    for(int i=1;i<=39;++i)
        p3[i]=3*p3[i-1];
    for(int i=1;i<=21;++i)
        p5[i]=5*p5[i-1];
    long long int maxx=-1;
    int n;
    in>>n;
    for(int i=1;i<=n;++i)
    {
        int a,b;
        in>>a>>b;
        while(a%2==0)
            v[i].c2++,a/=2;
        while(a%3==0)
            v[i].c3++,a/=3;
        while(a%5==0)
            v[i].c5++,a/=5;
        while(b%2==0)
            v[i].c2--,b/=2;
        while(b%3==0)
            v[i].c3--,b/=3;
        while(b%5==0)
            v[i].c5--,b/=5;
    }
    for(long long int j=1;j<=p2[n+1]-1;++j)
    {
        long long int kk=j;
        for(int i=1;i<=n;++i)
        {
            if(kk%2==1)
                f.push_back(i);
            kk/=2;
        }
        int s2=0,s3=0,s5=0;
        for(int i=0;i<f.size();++i)
        {
            s2+=v[f[i]].c2;
            s3+=v[f[i]].c3;
            s5+=v[f[i]].c5;
        }
        if(s2>=0 and s3>=0 and s5>=0)
        {
            long long int numar=1;
            if(s2>51)
            {
                numar*=p2[51];
                for(int i=52;i<=s2;++i)
                    numar*=2;
            }
            else numar*=p2[s2];
            if(s3>41)
            {
                numar*=p3[41];
                for(int i=42;i<=s3;++i)
                    numar*=3;
            }
            else numar*=p3[s3];
            if(s5>21)
            {
                numar*=p5[21];
                for(int i=22;i<=s5;++i)
                    numar*=5;
            }
            else numar*=p5[s5];
            if(numar>maxx)
                maxx=numar;
        }
        f.clear();
    }
    out<<maxx;
    return 0;
}