1 条题解

  • 1
    @ 2025-1-14 15:48:09

    题意

    题目传送门:

    洛谷 \ 梦熊

    题目说的非常清楚,就不再进行解释了。

    思路

    首先分三种情况:a<b,a>b,a=ba<b,a>b,a=b

    1. a<ba<b

      先将 aa 一直 ×2\times 2,直到 ×2\times 2>b>b 时停止,记下次数 cntcnt。然后有两种情况:

      • cnt+(ba)cnt+(b-a)aa 没有超过 bb,让 bb 减到 aa
      • cnt+1+(a2b)cnt+1+(a*2-b)aa 再一次 ×2\times 2,超过 bb,让 bb 加到 aa
    2. a>ba>b

      bb 一直加到 aa

    3. a=ba=b

      直接输出 00。(或者分为 a>ba>b 这类)

    思路就是这样,然后就分类处理就行了。

    Code

    下面是我的赛时代码:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	long long a, b;
    	cin >> a >> b;
    	long long cnt = 0;
    	if(a < b)
    	{
    		while(a*2 <= b) cnt++, a *= 2;
    		cout << min(cnt+(b-a), cnt+1+(a*2-b)) << endl;
    	}
    	else cout << (a-b) << endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    102
    时间
    3000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    717
    已通过
    138
    上传者