Description
农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来,他们都站在数轴上.
约翰在N(0≤N≤100000)处,奶牛在K(0≤K≤100000)处.
约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+1或x-1处;而瞬移则可让他在1秒内从x处消失,在2x处出现.
然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.
那么,约翰需要多少时间抓住那只牛呢?
Format
Input
仅有两个整数N和K.
Output
最短的时间.
Samples
输入数据 1
5 17
Copy
输出数据 1
4
这道题只需要把3种情况算出来,取最小值;
CODE
#include<bits/stdc++.h>
using namespace std;
int a[10000007],s[1000007],d[7];
int main() {
int n,k;
cin>>n>>k;
if(k==n)
{
cout<<0;
return 0;
}
a[1]=n;
s[n]=1;
int head=1,tail=1;
while(head<=tail)
{
int ans=a[head];
d[1]=ans+1;
d[2]=ans-1;
d[3]=ans*2;
for(int i=1;i<=3;i++)
{
if(d[i]>=0&&d[i]<=100000&&s[d[i]]==0)
{
tail++;
a[tail]=d[i];
s[d[i]]=s[ans]+1;
if(a[tail]==k)
{
cout<<s[k]-1;
return 0;
}
}
}
head++;
}
return 0;
}