zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    异常
    动态链接库与静态链接库的区别
    OpenBLAS 安装与使用
    Eigen 优化技巧
    C++读取保存为二进制的 numpy 数组
    Sublime Text Windows版使用Conda环境
    Repeater 时间格式化
    C#与js的各种交互
    js 实现精确加减乘除
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14710623.html
Copyright © 2011-2022 走看看