时间限制: 1000 ms 内存限制: 65536 KB
提交数:34683 通过数: 14042
【题目描述】
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000)𝑁(0≤𝑁≤100000),牛位于点K(0≤K≤100000)𝐾(0≤𝐾≤100000)。农夫有两种移动方式:
1、从X𝑋移动到X−1𝑋−1或X+1𝑋+1,每次移动花费一分钟
2、从X移动到2×X2×𝑋,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
【输入】
两个整数,N𝑁和K𝐾。
【输出】
一个整数,农夫抓到牛所要花费的最小分钟数。
【输入样例】
5 17
【输出样例】
4
code:
#include<iostream>
using namespace std;
int a, b;
int dfs(int b)
{
if (b <= a)
return a - b;
if (b % 2)
return min(dfs(b - 1) + 1, dfs(b + 1) + 1);
else
return min(dfs(b / 2) + 1, b - a);
}
int main()
{
cin >> a >> b;
int ans = 0;
if (a == 0)
ans = a = 1;
ans += dfs(b);
cout << ans;
return 0;
}
撒花,好久没更了