POJ3278——Catch That Cow
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 114140 | Accepted: 35715 |
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
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
Source
终于A掉这道题,BFS新认知。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<vector> #include<cmath> #include<cstring> #include<string> #define N 100010 using namespace std; void in( int &x){ register char c= getchar ();x=0; int f=1; while (! isdigit (c)){ if (c== '-' ) f=-1;c= getchar ();} while ( isdigit (c)){x=x*10+c- '0' ;c= getchar ();} x*=f; } int a,b,ans; struct Step{ int v,w; //位置,步数 Step( int xx, int s):v(xx),w(s){ } }; bool vis[N]; queue<Step>Q; void BFS(){ memset (vis,0, sizeof (vis)); vis[a]=1;Q.push(Step(a,0)); while (!Q.empty()){ Step s=Q.front();Q.pop(); if (s.v==b) { ans=s.w; break ; } else { if (s.v-1>=0 && !vis[s.v-1]){ Q.push(Step(s.v-1,s.w+1)); vis[s.v-1]=1; } if (s.v+1<=N &&!vis[s.v+1]){ Q.push(Step(s.v+1,s.w+1)); vis[s.v+1]=1; } if (s.v*2<=N && !vis[s.v*2]){ Q.push(Step(s.v*2,s.w+1)); vis[s.v*2]=1; } } } } int main() { in(a);in(b); BFS(); printf ( "%d\n" ,ans); return 0; } |
博主蒟蒻,若有出错的地方,敬请指出。
如有侵犯您版权的地方,请快速联系我,我会撤回本博文。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步