D. Chocolate

大意就是 给两块 矩形的长方形,一次能砍去一半或者砍去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;
原文地址:https://www.cnblogs.com/PdrEam/p/14710623.html