CF490D Chocolate 题解
看到楼上一堆大分讨,本人觉得完全没有必要。
本题可以使用一些数论的技巧。
记
然后考虑每一轮操作,如果
最终,满足
放代码:
#include<bits/stdc++.h>
using namespace std;
int f(int n,int i){
return n%i?0:1+f(n/i,i);
}
int main(){
int a,b,c,d,s=0; cin>>a>>b>>c>>d;
for(int i=3;i>=2;i--)
while(f(a,i)+f(b,i)-f(c,i)-f(d,i)&&++s){
if(f(a,i)+f(b,i)>f(c,i)+f(d,i)){
if(f(a,i))a=a/i*(i-1);
else b=b/i*(i-1);
}
else{
if(f(c,i))c=c/i*(i-1);
else d=d/i*(i-1);
}
}
if(1ll*a*b!=1ll*c*d)cout<<"-1\n";
else cout<<s<<endl<<a<<' '<<b<<endl<<c<<' '<<d<<endl;
return 0;
}