0
点赞
收藏
分享

微信扫一扫

轻量服务器2核与1核的区别

寒羽鹿 2023-09-24 阅读 33
c++算法

先看题目:

农夫知道一头牛的位置,想要抓住它。

农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。

农夫有两种移动方式:

从 X 移动到 X−1或 X+1,每次移动花费一分钟
从 X 移动到 2∗X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。

农夫最少要花多少时间才能抓住牛?

输入格式
共一行,包含两个整数N和K。

输出格式
输出一个整数,表示抓到牛所花费的最少时间。

数据范围
0≤N,K≤10^5
输入样例:

5 17

输出样例:

4

代码:

#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

int n, k;
int q[N];
int dist[N];

int bfs()
{
memset(dist, -1, sizeof dist);
dist[n] = 0;
q[0] = n;

int hh = 0, tt = 0;
while(hh <= tt)
{
int t = q[hh ++];

if(t == k) return dist[t];

if(t + 1 < N && dist[t + 1] == -1)
{
dist[t + 1] = dist[t] + 1;
q[++ tt] = t + 1;
}

if(t - 1 >= 0 && dist[t - 1] == -1)
{
dist[t - 1] = dist[t] + 1;
q[++ tt] = t - 1;
}

if(t * 2 < N && dist[t * 2] == -1)
{
dist[t * 2] = dist[t] + 1;
q[++ tt] = t * 2;
}
}

return -1;
}

int main()
{
cin >> n >> k;

printf("%d\n", bfs());

return 0;
}

1、q[]记录跳的点,dist[]记录距离

2、初始化距离,并且最开始的点为n,点n的距离为0

3、判断三种情况,这里顺序随便,因为最终取结果的时候,只会取最先到达的结果

举报

相关推荐

0 条评论