zoukankan      html  css  js  c++  java
  • CF490 D. Chocolate

    Problem - 490D - Codeforces

    题意:

    有2块大小分别为a1*b1和a2*b2的巧克力

    每个1*1的小巧克力不可再分割

    你可以进行若干次这个操作:

    选择一块巧克力,吃掉现在大小的一半或者三分之一

    注意你不能把1*1的巧克力破坏

    请问至少吃多少次,使2块巧克力的面积相等,并求出最后他们的边长

    有唯一分解定理可得

    如果面积是2或者3的倍数,那么他们的边长必有2或3的倍数

    所以可以直接考虑他们的面积

    将面积进行质因子分解

    吃掉1/2或者1/3的操作就是把2的指数减一或者把3的指数减一同时把2的指数加一

    两个巧克力若想面积相同,他们除了2和3的质因子的指数都得相同

    因为2的指数可加可减,所以先把3的指数搞成一样的

    #include<bits/stdc++.h>
     
    using namespace std;
     
    int s[4][3],cut[4][3];
     
    void cal(long long x,int w,int id)
    {
        while(!(x%w))
        {
            s[w][id]++;
            x/=w;
        }
    }
     
    int main()
    {
        int a[3],b[3];
        scanf("%d%d%d%d",&a[1],&b[1],&a[2],&b[2]);
        long long q1=1ll*a[1]*b[1],q2=1ll*a[2]*b[2];
        cal(q1,2,1);
        cal(q1,3,1);
        cal(q2,2,2);
        cal(q2,3,2);
        int sum=abs(s[3][1]-s[3][2]);
        if(s[3][1]<s[3][2])
        {
            cut[3][2]=s[3][2]-s[3][1];
            cut[2][2]-=cut[3][2];
        }
        else if(s[3][1]>s[3][2])
        {
            cut[3][1]=s[3][1]-s[3][2];
            cut[2][1]-=cut[3][1];
        }
        int h=abs((s[2][1]-cut[2][1])-(s[2][2]-cut[2][2]));
        sum+=h;
        if(s[2][1]-cut[2][1]<s[2][2]-cut[2][2]) 
        {
            cut[2][2]=h;
            cut[2][1]=0;
        }
        else 
        {
            cut[2][1]=h;
            cut[2][2]=0;
        }
        for(int w=1;w<=2;++w)
            for(int i=1;i<=cut[3][w];++i)
                if(!(a[w]%3)) a[w]=a[w]/3*2;
                else if(!(b[w]%3)) b[w]=b[w]/3*2;
        for(int w=1;w<=2;++w)
            for(int i=1;i<=cut[2][w];++i)
                if(!(a[w]%2)) a[w]/=2;
                else if(!(b[w]%2)) b[w]/=2;
        if(1ll*a[1]*b[1]!=1ll*a[2]*b[2]) printf("-1");
        else printf("%d
    %d %d
    %d %d",sum,a[1],b[1],a[2],b[2]);
    }
    作者:xxy
    本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
  • 相关阅读:
    动态规划>0/1背包问题 小强斋
    【C/C++和指针】auto_ptr智能指针
    WEBSHELL
    sql反模式分析1
    SQLServer之Compute/ComputeBy实现数据汇总
    链表算法大全
    【C++ Primer】自己动手编写函数 atoi(char *str)
    MySQL 5.5 的COMPRESSED INNODB 表
    【设计模式】加薪非要老总批 职责链模式
    【C和指针】const指针
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15367030.html
Copyright © 2011-2022 走看看