站外题求助,急!!!
  • 板块学术版
  • 楼主残阳如血
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/16 19:52
  • 上次更新2023/11/3 09:28:35
查看原帖
站外题求助,急!!!
726139
残阳如血楼主2023/7/16 19:52

题目描述

lm\rm lm同学在上课的时候就已经想好了中午去哪里吃饭.一下课,他就冲出教室,希望能以最快速度到达梆子井餐厅干饭。lm\rm lm同学初始时从数轴上的点 N(0≤N≤100,000)N (0 ≤ N ≤ 100,000) 开始,而梆子井餐厅在同一数轴上的点 K(0≤K≤100,000)K (0 ≤ K ≤ 100,000) 处。

步行:lm\rm lm同学可以在一分钟内从任意点 XX 移动到点 X−1X - 1 或 X+1X + 1

传送:lm\rm lm同学可以在一分钟内从任意点 XX 移动到点 2×X2 × X。

lm\rm lm同学着急干饭,请问lm\rm lm同学最快什么时候到达学子餐厅?

输入格式

仅一行,输入N(0≤N≤100,000)N (0 ≤ N ≤ 100,000) 和 K(0≤K≤100,000)K (0 ≤ K ≤ 100,000) .

输出格式

仅一行,输出lm\rm 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;
}
2023/7/16 19:52
加载中...