Pagini recente » Cod sursa (job #3269397) | Istoria paginii runda/cartofeala_2 | Cod sursa (job #2707447) | Cod sursa (job #2561660) | Cod sursa (job #1369873)
#include <iostream>
#include <fstream>
#include <cmath>
#define N 51
using namespace std;
int n,lf=0,na,ni,st[N];
long long P=1,maxp=0;
struct fractie
{
short na[10],ni[10];
}fr[N];
void factoriprimi(int na,int ni,int i)
{
while(na%5==0) {fr[lf].na[5]++;na/=5;}
while(na%3==0) {fr[lf].na[3]++;na/=3;}
while(na%2==0) {fr[lf].na[2]++;na/=2;}
while(ni%5==0)
{
if(fr[lf].na[5]>0)fr[lf].na[5]--;
else fr[lf].ni[5]++;
ni/=5;
}
while(ni%3==0)
{
if(fr[lf].na[3]>0)fr[lf].na[3]--;
else fr[lf].ni[3]++;
ni/=3;
}
while(ni%2==0)
{
if(fr[lf].na[2]>0)fr[lf].na[2]--;
else fr[lf].ni[2]++;
ni/=2;
}
}
void valid()
{
int i,na[10]={0},ni[10]={0};
long long p;
for(i=0;i<lf;i++)
if(st[i])
{
na[2]+=fr[i].na[2];
na[3]+=fr[i].na[3];
na[5]+=fr[i].na[5];
ni[2]+=fr[i].ni[2];
ni[3]+=fr[i].ni[3];
ni[5]+=fr[i].ni[5];
}
while(na[2]>0 && ni[2]>0) na[2]--,ni[2]--;
while(na[3]>0 && ni[3]>0) na[3]--,ni[3]--;
while(na[5]>0 && ni[5]>0) na[5]--,ni[5]--;
if(ni[2]==0 && ni[3]==0 && ni[5]==0)
{
p=pow(2,na[2])*pow(3,na[3])*pow(5,na[5]);
if(p*P>maxp) maxp=p*P;
//return 1;
}
//return 0;
}
void back(int k)
{
int i;
for(i=0;i<=1;i++)
{
st[k]=i;
valid();
if(k<lf-1)back(k+1);
}
}
int main()
{
int i;
ifstream f("aliens.in");
ofstream g("aliens.out");
f>>n;
for(i=0;i<n;i++)
{
f>>na>>ni;
fr[lf].na[2]=fr[lf].na[3]=fr[lf].na[5]=0;
factoriprimi(na,ni,i);
if(fr[lf].ni[2]==0 && fr[lf].ni[3]==0 && fr[lf].ni[5]==0)
P*=(pow(2,fr[lf].na[2])*pow(3,fr[lf].na[3])*pow(5,fr[lf].na[5]));
else lf++;
}
back(0);
g<<maxp;
}