吃水果【贪心+数学】

题意:

吃水果【贪心+数学】

题目链接

分析:

(n=m) 时,显然只能通过不断的吃水果来达到目标,因此使两种水果的数量相等就是我们的目的。
(n<m)
注意到 (ngeq lceilfrac{m}{2}rceil)(n<m) 时,可以同时减小两个的值来使得 (n) 的值等于二者的差值,这样只要再对 (n) 进行 (*2) 的操作,二者即可相等。
(n<lceilfrac{m}{2}rceil) 时,可以通过对 (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("%dn",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("%dn",cnt);
    }
    return 0;
}

原文链接: https://www.cnblogs.com/1024-xzx/p/12682124.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    吃水果【贪心+数学】

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341444

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午1:05
下一篇 2023年3月2日 上午1:05

相关推荐