大意就是 给两块 矩形的长方形,一次能砍去一半或者砍去1/3
就是说对边长质因数分解,划分为 2 3 其他
砍去一半 消去一个2
砍去1/3 把3转化为2
那么 其他 不一样就不行了
首先 得到 两个矩形 的3的个数 的差值 ,对两个边消去差值,将之转为2
然后 得到 两个矩形 的2的个数 的差值 ,对两个边消去差值
那我们就得到了其他和 一些相同个数的2
比较一下成不成功
cin >> a1 >> b1 >> a2 >> b2; ll a=a1*b1, b=a2*b2; while(a%3==0) ++num1, a/=3;//第一块 3的个数 while(b%3==0) ++num2, b/=3;//第二块 3的个数 ans+=abs(num1-num2);//答案中只计算到差值 while(num1>num2 && a1%3==0) a1-=a1/3, --num1;//3转2 while(num1>num2 && b1%3==0) b1-=b1/3, --num1; while(num1<num2 && a2%3==0) a2-=a2/3, --num2; while(num1<num2 && b2%3==0) b2-=b2/3, --num2; a=a1*b1, b=a2*b2; num1=num2=0; while(a%2==0) ++num1, a/=2; while(b%2==0) ++num2, b/=2; ans+=abs(num1-num2); while(num1>num2 && a1%2==0) a1-=a1/2, --num1; while(num1>num2 && b1%2==0) b1-=b1/2, --num1; while(num1<num2 && a2%2==0) a2-=a2/2, --num2; while(num1<num2 && b2%2==0) b2-=b2/2, --num2; if(a1*b1!=a2*b2) { puts("-1"); return 0; } cout << ans << endl << a1 << ' ' << b1 << endl << a2 << ' ' << b2;