3 条题解
-
0
题意
题目传送门:
题目说的非常清楚,就不再进行解释了。
思路
首先分三种情况:。
-
。
先将 一直 ,直到 会 时停止,记下次数 。然后有两种情况:
- ( 没有超过 ,让 减到 )
- ( 再一次 ,超过 ,让 加到 )
-
。
让 一直加到 。
-
。
直接输出 。(或者分为 这类)
思路就是这样,然后就分类处理就行了。
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; }
-
-
-2
MX-X7—T1题解
解题方法
a可以×2(无线)
b可以+1或-1(微调)
所以要在最短步骤内让a=b,就要让b=最近的a*(2的次方(包括0次方))
Code
#include <bits/stdc++.h> using namespace std; long long a,b,ans=999999999,i=1; int main(){ cin>>a>>b; ans=min(abs(b-a),abs(2*a-b)+1); for(long long x=0;pow(2,x-1)*a<=b;x++){ ans=min(abs((i*a)-b)+x,ans); i=i*2; } cout<<ans; return 0; }
- 1
信息
- ID
- 102
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 757
- 已通过
- 151
- 上传者