zoukankan      html  css  js  c++  java
  • POJ 3278 Catch That Cow

    Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 35043   Accepted: 10800

    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.

    Source

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 
     6 using namespace std;
     7 
     8 const int maxn=100000;
     9 
    10 int vis[maxn+10];
    11 int n,k;
    12 
    13 struct node{
    14     int x,c;
    15 };
    16 
    17 int BFS(){
    18     queue<node> q;
    19     while(!q.empty())
    20         q.pop();
    21     memset(vis,0,sizeof(vis));
    22     node cur,next;
    23     cur.x=n,cur.c=0;
    24     vis[cur.x]=1;
    25     q.push(cur);
    26     while(!q.empty()){
    27         cur=q.front();
    28         q.pop();
    29         for(int i=0;i<3;i++){
    30             if(i==0)
    31                 next.x=cur.x-1;
    32             else if(i==1)
    33                 next.x=cur.x+1;
    34             else
    35                 next.x=cur.x*2;
    36             next.c=cur.c+1;
    37             if(next.x==k)
    38                 return next.c;
    39             if(next.x>=0 && next.x<=maxn && !vis[next.x]){
    40                 vis[next.x]=1;
    41                 q.push(next);
    42             }
    43         }
    44     }
    45     return 0;
    46 }
    47 
    48 int main(){
    49 
    50     //freopen("input.txt","r",stdin);
    51 
    52     while(~scanf("%d%d",&n,&k)){
    53         if(n>=k){
    54             printf("%d\n",n-k);
    55             continue;
    56         }
    57         printf("%d\n",BFS());
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    Spring 中PageHelper分页插件使用
    手写Spring框架学习笔记
    Spring 集成Junit单元测试
    创建产品服务工程
    Oracle 常用SQL语句
    解决The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
    微服务如何拆分
    Eureka的高可用
    Eureka Client的使用
    Spring Cloud Eureka Server使用(注册中心)
  • 原文地址:https://www.cnblogs.com/jackge/p/3023813.html
Copyright © 2011-2022 走看看