题记:简单BFS
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e5+1;
typedef long long ll;
int n,k;
int vis[N];
struct node{
int x,step;
};
queue<node> q;
int bfs(){
node st;
st.x=n;
st.step=0;
vis[n]=1;
q.push(st);
while(!q.empty()){
node ne;
st=q.front();
q.pop();
//cout<<st.x<<endl;
if(st.x==k) return st.step;
for(int i=0;i<3;i++){
if(i==0) ne.x=st.x-1;
else if(i==1) ne.x=st.x+1;
else ne.x=st.x*2;
ne.step=st.step+1;
if(ne.x<0||ne.x>=N)continue;
if(!vis[ne.x]){
q.push(ne);
vis[ne.x]=1;
}
}
}
}
int main(){
while(cin>>n>>k){
if(n>k){
cout<<n-k<<endl;
continue;
}
memset(vis,0,sizeof(vis));
while(!q.empty()) q.pop();
cout<<bfs()<<endl;
}
return 0;
}