POJ - 3287 Catch That Cow #include<cstdio> #include<cstring> #include<queue> using namespace std; const int N = 1000010; int dist[N]; int bfs(int begin,int end) { memset(dist,-1,sizeof dist); queue<int> Q; Q.push(begin); dist[begin]=0; while(!Q.empty()) { int x,t=Q.front();Q.pop(); for(int i=0;i<3;i++) { if(i==0) x=t+1; if(i==1) x=t-1; if(i==2) x=t*2; if(x<0||x>100005) continue; if(dist[x]!=-1) continue; dist[x]=dist[t]+1; if(x==end) return dist[x]; Q.push(x); } } return -1; } int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) { if(n>=k) printf("%d\n",n-k); else printf("%d\n",bfs(n,k)); } return 0; }