zoukankan      html  css  js  c++  java
  • hdoj 2717 Catch That Cow

    Problem 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.
    讲解:一农夫追牛,牛很笨,他就在原地等着农夫来抓他,并且这是一条直线,农夫很容易就能找到它的,然而农夫却只有三种选择,退一步,走一步,或者走到当前位置的2倍;于是乎我们可以用搜索来解决;
    代码如下:
     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<queue>
     6 using namespace std;
     7 int n,m;
     8 int map[200010];
     9 struct T
    10 {
    11     int x,step;
    12 };
    13 int dfs(T now)
    14 {queue< T >q;
    15     T end;
    16     q.push(now);
    17     while(!q.empty())
    18     {
    19         end=q.front();
    20           q.pop();
    21         map[end.x]=1;
    22     if(end.x==m)
    23      {return end.step;}
    24      //如果不是走一步一判断很容易超出内存的
    25      now.x=end.x+1;//前进一步,存入队列;
    26          if(end.x>=0 && end.x<=100000 && map[now.x]==0)
    27          {
    28              now.step=end.step+1;
    29              map[now.x]==1;
    30              q.push(now);
    31          }
    32      now.x=end.x-1;//后退一步
    33      if(end.x>=0 && end.x<=100000 && map[now.x]==0)
    34      {
    35          now.step=end.step+1;
    36          map[now.x]==1;
    37          q.push(now);
    38      }
    39      now.x=end.x*2;//前进2倍的位置
    40      if(end.x>=0 && end.x<=100000 && map[now.x]==0)
    41      {
    42          now.step=end.step+1;
    43          map[now.x]==1;
    44          q.push(now);
    45      }
    46     }
    47     return 0;
    48 }
    49 int main()
    50 {
    51     T now;
    52     while(cin>>n>>m)
    53     {
    54         if(n>=m)//如果n大于m则只能后退了;
    55        {
    56            cout<<n-m<<endl;continue;
    57        }
    58        else
    59        {
    60         memset(map,0,sizeof(map));
    61         now.x=n;now.step=0;
    62         int mm=dfs(now);
    63         cout<<mm<<endl;
    64        }
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/lovychen/p/3456478.html
Copyright © 2011-2022 走看看