标签:empty reac imm The input 剪枝 暴力 size lang
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?
5 17
4
#include <algorithm> #include <bitset> //#include <bits/extc++.h> #include <cstring> #include <iomanip> #include <iostream> #include <map> #include <queue> using namespace std; //using namespace __gnu_pbds #define ll long long #define maxn 105 int s, e, step[100005]; bool vis[100005]; void bfs() { queue<int> q; q.push(s); vis[s] = 0; step[s] = 0; while (!q.empty()) { int now = q.front(); q.pop(); int next = now + 1; if (next <= e && vis[next]) { vis[next] = false; step[next] = step[now] + 1; q.push(next); } if (next == e) { return; } next = now - 1; if (next >= 0 && vis[next]) { vis[next] = false; step[next] = step[now] + 1; q.push(next); } if (next == e) { return; } next = now << 1; if ((next <= e || next - e + 1 < e - now) && next <= 100000 && vis[next]) { vis[next] = false; step[next] = step[now] + 1; q.push(next); } if (next == e) { return; } } } int main() { while (~scanf("%d%d", &s, &e)) { memset(vis, true, sizeof(vis)); if (s >= e) { printf("%d\n", s - e); //剪枝 } else { bfs(); printf("%d\n", step[e]); } } return 0; }
标签:empty reac imm The input 剪枝 暴力 size lang
原文地址:https://www.cnblogs.com/whitabbit/p/12228477.html