#include<stdio.h> #include<string.h> const int MAX = 500000 + 5; const int INF = 0x3f3f3f3f; int time[MAX]; int queue[MAX]; int bfs(int n,int k) { memset(time,INF,sizeof(time)); //queue<int> que; //que.push(n); int front,rear; front = rear = 0; rear++; queue[front] = n; time[n] = 0; while(front < rear) { //int t = que.front();que.pop(); int t = queue[front]; front++; if(t == k) break; if(t >= 1 && time[t - 1] == INF) { //que.push(t-1); queue[rear++] = t - 1; time[t-1] = time[t] + 1; } if(t <= k && time[t * 2] == INF) { //que.push(t * 2); queue[rear++] = t * 2; time[t * 2] = time[t] + 1; } if(t <= k && time[t + 1] == INF) { queue[rear++] = t + 1; time[t + 1] = time[t] + 1; } } return time[k]; } int main() { int n,k; while(~scanf("%d %d",&n,&k)) { int ans = bfs(n,k); printf("%d\n",ans); } return 0; } /************************************************************** Problem: 2111 User: admin Language: C++ Result: Accepted Time:77 ms Memory:5052 kb ****************************************************************/