#include <iostream> #include <queue> using namespace std; struct Position { Position( int a, int b ) :pos( a ), step( b ){}; int pos, step; }; bool v[200001]; queue<Position> q; int n, k; int bfs(); int main() { while ( cin >> n >> k ) { cout << bfs() << endl; } return 0; } int bfs() { while ( !q.empty()) q.pop(); memset( v, 0, sizeof v ); q.push( Position( n, 0 )); v[n] = true; int pt, st = 0; while ( !q.empty()) { if ( v[k] ) return st; pt = q.front().pos; st = q.front().step + 1; q.pop(); if ( pt < 200000 && !v[pt + 1] ) { q.push( Position( pt + 1, st )); v[pt + 1] = true; } if ( pt > 0 && !v[pt - 1] ) { q.push( Position( pt - 1, st )); v[pt - 1] = true; } if ( pt <= 100000 && !v[2 * pt] ) { q.push( Position( pt * 2, st )); v[pt * 2] = true; } } return -1; } 注意:1.n==k 2.数组大小开20W。