• POJ 3278 Catch That Cow


    题目地址: https://vjudge.net/problem/POJ-3278
     
    Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 129558   Accepted: 40251

    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 - 1 or + 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.
     
     1 #include<iostream>  
     2 #include<cstring>   
     3 #include<stdio.h> 
     4 #include<queue>
     5 
     6 using namespace std;
     7 
     8 #define MAX 100000
     9 int N, K;
    10 int vis[MAX + 20];
    11 
    12 struct node
    13 {
    14     int x;
    15     int step;
    16 }s;
    17 
    18 void bfs(int x)
    19 {
    20     memset(vis, 0, sizeof(vis));
    21     s.x = x;
    22     s.step = 0;
    23     vis[x] = 1;
    24     queue<node> Q;
    25     Q.push(s);
    26 
    27     node t;
    28     while (!Q.empty())
    29     {
    30         t = Q.front();
    31         Q.pop();
    32 
    33         if (t.x == K)
    34         {
    35             cout << t.step << endl;
    36             return;
    37         }
    38 
    39         if (t.x + 1 <= MAX && !vis[t.x + 1])
    40         {
    41             s.x = t.x + 1;
    42             s.step = t.step + 1;
    43             vis[s.x] = 1;
    44             Q.push(s);
    45         }
    46         if (t.x - 1 >= 0 && !vis[t.x - 1])
    47         {
    48             s.x = t.x - 1;
    49             s.step = t.step + 1;
    50             vis[s.x] = 1;
    51             Q.push(s);
    52         }
    53         if (t.x * 2 <= MAX && !vis[t.x * 2])
    54         {
    55             s.x = t.x * 2;
    56             s.step = t.step + 1;
    57             vis[s.x] = 1;
    58             Q.push(s);
    59         }
    60     }
    61     return;
    62 }
    63 
    64 int main()
    65 {
    66     while(cin >> N >> K)
    67         bfs(N);
    68 
    69 
    70     return 0;
    71 }
  • 相关阅读:
    #线段树,矩阵乘法#LOJ 3264「ROIR 2020 Day 2」海报
    #线段树#洛谷 4428 [BJOI2018]二进制
    #Trie#洛谷 7717 「EZEC-10」序列
    shell脚本生成双色球号码
    k8s的tomcat多pod session会话保持配置
    国产系统优麒麟系统使用
    grdi报错--grid的asm磁盘丢失处理方法
    centos7上安装oracle的sqlplus客户端
    linux挂载
    linux占用100%cpu的java处理
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/10394816.html
Copyright © 2020-2023  润新知