zoukankan      html  css  js  c++  java
  • 吃水果【贪心+数学】

    题意:

    题目链接

    分析:

    (n=m) 时,显然只能通过不断的吃水果来达到目标,因此使两种水果的数量相等就是我们的目的。
    (n<m)
    注意到 (ngeq lceilfrac{m}{2} ceil)(n<m) 时,可以同时减小两个的值来使得 (n) 的值等于二者的差值,这样只要再对 (n) 进行 (*2) 的操作,二者即可相等。
    (n<lceilfrac{m}{2} ceil) 时,可以通过对 (n) 进行 (*2) 来达到第一个条件。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int t,n,m;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            if(n>m)
                swap(n,m);
            int cnt=0;
            while(n!=m)
            {
                if(n>=(m+1)/2&&n<m)
                {
                    int d=m-n;
                    cnt+=(n-d);
                    cnt++;
                    n=2*d;
                    m=2*d;
                }
                else
                {
                    n*=2;
                    cnt++;
                }
            }
            cnt+=n;
            printf("%d
    ",cnt);
        }
        return 0;
    }
    
    

    也可以直接计算出结果:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int t,n,m;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            if(n>m)
                swap(n,m);
            int cnt=m+1;
            int d=(log(1.0*m/n)/log(2.0));
            if(m!=2*n)
                cnt+=d;
            printf("%d
    ",cnt);
        }
        return 0;
    }
    
    
  • 相关阅读:
    Springboot websocket学习Demo
    webpack与vue使用
    图片服务器图片剪切处理
    时间字段设置默认值
    函数的递归
    数据类型检测及封装
    隔行变色
    if-else案例–开关灯
    作用域
    数据类型核心操作步骤和原理
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/12682124.html
Copyright © 2011-2022 走看看