lm同学在上课的时候就已经想好了中午去哪里吃饭.一下课,他就冲出教室,希望能以最快速度到达梆子井餐厅干饭。lm同学初始时从数轴上的点 N(0≤N≤100,000)开始,而梆子井餐厅在同一数轴上的点 K(0≤K≤100,000)处。
步行:lm同学可以在一分钟内从任意点 X 移动到点 X−1 或 X+1
传送:lm同学可以在一分钟内从任意点 X 移动到点 2×X。
lm同学着急干饭,请问lm同学最快什么时候到达学子餐厅?
仅一行,输入N(0≤N≤100,000)和 K(0≤K≤100,000).
仅一行,输出lm同学最快什么时候到达梆子井餐厅
5 17
4
求大佬帮帮忙 代码如下:
#include <queue>
#include <iostream>
#include <cstdio>
using namespace std;
const int SIZE = 1 << 14;
int vis[10000100];
char getc() {
static char buf[SIZE], *begin = buf, *end = buf;
if (begin == end) {
begin = buf;
end = buf + fread(buf, 1, SIZE, stdin);
}
return *begin++;
}
int read() {
int sgn = 0, ret = 0, ch = getc();
while (!isdigit(ch) && ch != EOF) ch |= ch == '-', ch = getc();
while (isdigit(ch) && ch != EOF) ret = ret * 10 + ch - '0', ch = getc();
return sgn ? -ret : ret;
}
void write(int x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
return;
}
int main() {
int N, K;
queue<int> q;
cin >> N >> K;
q.push(N);
while (!q.empty()) {
int cur = q.front();
q.pop();
if (cur == K) {
cout << vis[cur];
return 0;
}
if (cur < K && vis[cur * 2] == 0) {
q.push(cur * 2);
vis[cur * 2] = vis[cur] + 1;
}
if (vis[cur + 1] == 0) {
q.push(cur + 1);
vis[cur + 1] = vis[cur] + 1;
}
if (cur - 1 != -1 && vis[cur - 1] == 0) {
q.push(cur - 1);
vis[cur - 1] = vis[cur] + 1;
}
}
cout << -1;
return 0;
}