poj 3278

来源:互联网 发布:淘宝买港版note7怎么退 编辑:程序博客网 时间:2024/06/06 02:24

A - Catch That Cow
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu
Submit

Status

Practice

POJ 3278
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.

#include<stdio.h>#include<queue>#include<string.h>using namespace std;  queue<int> p;  int step[100005];  int vis[100005];  int n,m;  bool let(int u)  {      if(u<0||u>100000||vis[u])          return 0;      return 1;  }  int bfs()  {      p.push(n);      while(!p.empty())      {          int u;          u=p.front();          p.pop();          if(u==m)          {              printf("%d\n",step[u]);              return 0;          }          if(let(u+1))          {              step[u+1]=step[u]+1;              vis[u+1]=1;              p.push(u+1);          }          if(let(u-1))          {              step[u-1]=step[u]+1;              vis[u-1]=1;              p.push(u-1);          }          if(let(u*2))          {              step[2*u]=step[u]+1;              vis[2*u]=1;              p.push(2*u);          }      }  }  int main()  {      scanf("%d%d",&n,&m);      bfs();      return 0;  } 
0 0
原创粉丝点击