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♪(・ω・)ノ。
  • 相关阅读:
    BZOJ1040: [ZJOI2008]骑士
    Codeforces 849D.Rooter's Song
    POJ4852 Ants
    NOIP模拟赛 17.10.10
    Codeforces 851D Arpa and a list of numbers
    BZOJ2529: [Poi2011]Sticks
    BZOJ1826: [JSOI2010]缓存交换
    POJ3579 Median
    codevs1214 线段覆盖
    POJ2230 Watchcow
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15367030.html
Copyright © 2011-2022 走看看