水一道。。。
#include "stdio.h"
#include "string.h"
#include "queue"
using namespace std;
struct node
{
int x,step;
};
int hash[150001];
int main()
{
int a,b,i;
queue<node>q;
node cur,next;
while (scanf("%d%d",&a,&b)!=EOF)
{
memset(hash,0,sizeof(hash));
while (!q.empty()) q.pop();
hash[a]=1;
cur.x=a;
cur.step=0;
q.push(cur);
if (a==b) {printf("0\n"); continue;}
while (!q.empty())
{
cur=q.front();
q.pop();
next.x=cur.x-1;
if (next.x>=0 && hash[next.x]==0)
{
next.step=cur.step+1;
q.push(next);
if (next.x==b) {printf("%d\n",next.step); break;}
hash[next.x]=1;
}
next.x=cur.x+1;
if (next.x<=150000 && hash[next.x]==0)
{
next.step=cur.step+1;
q.push(next); if (next.x==b) {printf("%d\n",next.step); break;}
hash[next.x]=1;
}
next.x=cur.x*2;
if (next.x<=150000 && hash[next.x]==0)
{
next.step=cur.step+1;
q.push(next); if (next.x==b) {printf("%d\n",next.step); break;}
hash[next.x]=1;
}
}
}
return 0;
}