publicclassPOJ3278{privatestaticvoidmain(String[] args){finalScanner scanner =newScanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();bfs(n, k);}privatevoidbfs(int n,int k){if(n >= k){System.out.println(n - k);return;}int[] visits =newint[MAX*2];//0:unvisited 1:visitedint[] steps =newint[MAX*2];//steps[i] means steps from n to iQueue<Integer> integers =newLinkedBlockingQueue<>();
integers.add(n);
visited[n]=1;int current;
intn next =0;while(!integers.isEmpty()){
current = integers.poll();for(int i =0; i <3; i++){if(i ==0){
next = current +1;if(next <=MAX&& next >=0&& visit[next]==0){
steps[next]= steps[current]+1;
integers.add(next);
visits[next]=1;if(next == k){System.out.println(steps[next]);return;}}}elseif(i ==1){
next = current -1;if(next <=MAX&& next >=0&& visit[next]==0){
steps[next]= steps[current]+1;
integers.add(next);
visits[next]=1;if(next == k){System.out.println(steps[next]);return;}}}else{
next = current *2;if(next <=MAX&& next >=0&& visit[next]==0){
steps[next]= steps[current]+1;
integers.add(next);
visits[next]=1;if(next == k){System.out.println(steps[next]);return;}}}}}}}