• [POJ3278] Catch That Cow


    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

    USACO 2007 Open Silver

    题意

    在同一数轴上,有一头奶牛坐标为k,农夫的坐标为n,要从n运动到k。有三种方法:

    1. 从当前位置x运动到x+1
    2. 从当前位置x运动到x-1
    3. 当前位置x运动到2*x

    题解

    裸裸的(BFS)

    #include<iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    
    const int N=100001;
    bool vis[N];
    int n,k;
    typedef pair<int,int> pr;
    
    void Bfs()
    {
    	queue<pr> Q;
    	Q.push(make_pair(n,0));
    	vis[n]=1;
    	while(!Q.empty())
    	{
    		if(Q.front().first==k)
    		{
    			printf("%d
    ",Q.front().second);
    			return;
    		}
    		if((Q.front().first+1<N)&&(!vis[Q.front().first+1]))
    		{
    			vis[Q.front().first+1]=1;
    			Q.push(make_pair(Q.front().first+1,Q.front().second+1));
    		}
    		if((Q.front().first-1>=0)&&(!vis[Q.front().first-1]))
    		{
    			vis[Q.front().first-1]=1;
    			Q.push(make_pair(Q.front().first-1,Q.front().second+1));
    		}
    		if(((Q.front().first<<1)<N)&&(!vis[Q.front().first<<1]))
    		{
    			vis[Q.front().first<<1]=1;
    			Q.push(make_pair(Q.front().first<<1,Q.front().second+1));
    		}
    		Q.pop();
    	}
    }
    
    int main()
    {
    	scanf("%d%d",&n,&k),Bfs();
    	return 0;
    }
    

    本文作者:OItby @ https://www.cnblogs.com/hihocoder/

    未经允许,请勿转载。

  • 相关阅读:
    第10组 团队展示
    第一次结对编程作业
    13.Vue.js 组件
    12.Vue.js 表单
    11.Vue.js-事件处理器
    10.Vue.js 样式绑定
    9.Vue.js 监听属性
    8.Vue.js-计算属性
    7.循环语句
    6.Vue.js-条件与循环
  • 原文地址:https://www.cnblogs.com/hihocoder/p/11405277.html
Copyright © 2020-2023  润新知