Pagini recente » Cod sursa (job #48447) | Cod sursa (job #2235119) | Cod sursa (job #580065) | Monitorul de evaluare | Cod sursa (job #995476)
Cod sursa(job #995476)
#include<fstream>
using namespace std;
ifstream in("aliens.in");
ofstream out("aliens.out");
const int N = 55;
struct ffrac{
struct numarator{
int d,t,c;
} n;
struct numitor{
int d,t,c;
} nn;
} v[N],proc[N],total[N];
int n,x,y,slct[N],m,bb[N],maxx;
ffrac sum(ffrac a,ffrac b){
ffrac s;
s.n.d=a.n.d+b.n.d;
s.n.t=a.n.t+b.n.t;
s.n.c=a.n.c+b.n.c;
s.nn.d=a.nn.d+b.nn.d;
s.nn.t=a.nn.t+b.nn.t;
s.nn.c=a.nn.c+b.nn.c;
return s;
}
int categor(ffrac a){
int doi=a.n.d-a.nn.d;
int trei=a.n.t-a.nn.t;
int cinci=a.n.c-a.nn.c;
if(doi>=0 && trei>=0 && cinci>=0) return 1;
if(doi<=0 && trei<=0 && cinci<=0) return 2;
return 0;
}
int power(int b,int e){
int p=1;
for(int i=1;i<=e;i++) p*=b;
return p;
}
void process2(ffrac a){
//out<<a.n.d<<' '<<a.n.t<<' '<<a.n.c<<'\n';
int comp=1;
comp*=power(2,a.n.d);
comp*=power(3,a.n.t);
comp*=power(5,a.n.c);
if(comp>maxx) maxx=comp;
}
void process1(ffrac a){
//out<<a.n.d<<' '<<a.n.t<<' '<<a.n.c<<' '<<a.nn.d<<' '<<a.nn.t<<' '<<a.nn.c<<'\n';
int doi=a.n.d-a.nn.d;
int trei=a.n.t-a.nn.t;
int cinci=a.n.c-a.nn.c;
if(doi>=0 && trei>=0 && cinci>=0){
ffrac b;
b.n.d=doi;
b.n.t=trei;
b.n.c=cinci;
process2(b);
}
}
void back(int i){
for(bb[i]=bb[i-1]+1;bb[i]<=m;bb[i]++){
total[i]=sum(total[i-1],proc[bb[i]]);
process1(total[i]);
if(i<m) back(i+1);
}
}
int main(){
in>>n;
for(int i=1;i<=n;i++){
in>>x>>y;
while(x%2==0){v[i].n.d++;x/=2;}
while(x%3==0){v[i].n.t++;x/=3;}
while(x%5==0){v[i].n.c++;x/=5;}
while(y%2==0){v[i].nn.d++;y/=2;}
while(y%3==0){v[i].nn.t++;y/=3;}
while(y%5==0){v[i].nn.c++;y/=5;}
}
for(int i=1;i<=n;i++) slct[i]=categor(v[i]);
for(int i=1;i<=n;i++){
if(slct[i]==0) proc[++m]=v[i];
if(slct[i]==1) total[0]=sum(total[0],v[i]);
}
back(1);
out<<maxx;
return 0;
}