标签:
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 54696 | Accepted: 17101 |
Description
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Output
Sample Input
5 17
Sample Output
4
Hint
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #define N 100009 using namespace std; int n,k; int vis[N]; int a[N]; int t; int main() { while(~scanf("%d %d",&n,&k)) { if(n==k) { cout<<0<<endl; continue; } memset(a,0,sizeof a); memset(vis,0,sizeof vis); queue<int>q; q.push(n); while(!q.empty()) { t=q.front(); q.pop(); if(t+1<N && vis[t+1]==0) { vis[t+1]=1; q.push(t+1); a[t+1]=a[t]+1; } if(t+1==k) {break;} if(t-1>=0 && vis[t-1]==0) { vis[t-1]=1; q.push(t-1); a[t-1]=a[t]+1; } if(t-1==k) {break;} if(t*2<N && vis[t*2]==0) { vis[t*2]=1; q.push(t*2); a[t*2]=a[t]+1; } if(t*2==k) {break;} } printf("%d\n",a[k]); } return 0; }
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/45749045