每日一题 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

cpp 复制代码
#include <iostream>
#include <queue>

using namespace std;
//广度优先队列 所有邻居都访问
//队列 集合是否被访问过的状态
struct info{//位置 时间
    int pos;
    int time;
};
int main() {
    int n,k;
    scanf("%d%d",&n,&k);
    queue<info> posQueue;
    bool isvisit[100001];
    for(int i=0;i<100001;i++){
        isvisit[i]= false;
    }
    info first;
    first.pos=n;
    first.time=0;
    posQueue.push(first);
    while(posQueue.empty()==false){
        info cur=posQueue.front();
        posQueue.pop();
        if(cur.pos==k){
            printf("%d\n",cur.time);
            break;
        }
        isvisit[cur.pos]= true;//不是则改为已访问过
        //把邻居加入到队列中
        info neighbour;
        if(cur.pos-1>=0 && cur.pos-1<=100000 && isvisit[cur.pos-1]==false){
            neighbour.pos=cur.pos-1;
            neighbour.time=cur.time+1;
            posQueue.push(neighbour);
        }
        if(cur.pos+1>=0 && cur.pos+1<=100000 && isvisit[cur.pos+1]==false){
            neighbour.pos=cur.pos+1;
            neighbour.time=cur.time+1;
            posQueue.push(neighbour);
        }
        if(cur.pos*2>=0 && cur.pos*2<=100000 && isvisit[cur.pos*2]==false){
            neighbour.pos=cur.pos*2;
            neighbour.time=cur.time+1;
            posQueue.push(neighbour);
        }
    }
    return 0;
}
相关推荐
.YM.Z11 小时前
【数据结构】:排序(一)
数据结构·算法·排序算法
Chat_zhanggong34511 小时前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法
百***480712 小时前
【Golang】slice切片
开发语言·算法·golang
墨染点香12 小时前
LeetCode 刷题【172. 阶乘后的零】
算法·leetcode·职场和发展
做怪小疯子12 小时前
LeetCode 热题 100——链表——反转链表
算法·leetcode·链表
做怪小疯子14 小时前
LeetCode 热题 100——矩阵——旋转图像
算法·leetcode·矩阵
努力学习的小廉14 小时前
我爱学算法之—— BFS之最短路径问题
算法·宽度优先
高山上有一只小老虎14 小时前
构造A+B
java·算法
木头左14 小时前
缺失值插补策略比较线性回归vs.相邻填充在LSTM输入层的性能差异分析
算法·线性回归·lstm
sin_hielo15 小时前
leetcode 2435
数据结构·算法·leetcode