// 1100. 抓住那头牛.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <queue>
#include <map>
using namespace std;
/*
https://www.acwing.com/problem/content/1102/
农夫知道一头牛的位置,想要抓住它。
农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。
农夫有两种移动方式:
从 X 移动到 X−1 或 X+1,每次移动花费一分钟
从 X 移动到 2∗X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。
农夫最少要花多少时间才能抓住牛?
输入格式
共一行,包含两个整数N和K。
输出格式
输出一个整数,表示抓到牛所花费的最少时间。
数据范围
0≤N,K≤105
输入样例:
5 17
输出样例:
4
*/
int n, k;
int main()
{
cin >> n >> k;
queue<int> q;
q.push(n);
map<int, int> mm; mm[n] = 1;
while (!q.empty()) {
int curr = q.front(); q.pop();
int step = mm[curr];
if (curr == k) {
cout << step << endl; return 0;
}
int a = curr * 2;
int b = curr - 1;
int c = curr + 1;
if (a < 2 * k && mm.count(a)==0) {
q.push(a); mm[a] = step + 1;;
}
if (b >= 0 && mm.count(b) == 0) {
q.push(b); mm[b] = step + 1;;
}
if (c >= 0 && c < 2 * k && mm.count(c) == 0) {
q.push(c); mm[c] = step + 1;;
}
}
}
标签:curr,头牛,mm,int,抓住,1100,push,include,农夫
From: https://www.cnblogs.com/itdef/p/18302592