求助,为什么会RE
  • 板块学术版
  • 楼主Maysoul
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/4/9 21:53
  • 上次更新2023/10/23 18:51:00
查看原帖
求助,为什么会RE
409774
Maysoul楼主2023/4/9 21:53

有一个直线魔法阵其范围为[0,10^7],其中有一根魔法杖在坐标d,哈利需要从坐标s出发用最短的时间拿到魔法杖。哈利在1秒内可以从当前坐标a移动到 a-1或a+1,也可以使用魔法从a坐标传送到2×a坐标。哈利最少需要多少秒能到魔法杖所在位置?

注意:任何时刻哈利都不能从魔法阵里移动出去。

输入 第一行,一个整数s,表示哈利所在坐标。

第二行,一个整数d,表示魔法杖所在坐标。

对于100%的数据: 0<=s,d<=1e7

输出 一行,一个整数,表示哈利需要的最短时间。

边界为1e7,1e6跑不过256 398这个Hack,开小了就不符合题意,该怎么办呢

//2023/4/9
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e7+10;
int num,ans;
bool vis[MAXN];
queue<int> que;
int bfs(int n,int k)
{
	int min=0;
	vis[n]=1;
	que.push(n);
	while(!que.empty())
	{
		int cur=que.size();
		min++;
		while(cur--)
		{
			int a=que.front();
			que.pop();
			if(a==k)
			{
				return min-1;
			}
			if(vis[2*a]==0&&2*a<1e7)
			{
				que.push(2*a);
				vis[2*a]=1;
			}
			if(vis[a+1]==0&&a+1<1e7)
			{
				que.push(a+1);
				vis[a+1]=1;
			}
			if(vis[a-1]==0&&a>=1)
			{
				que.push(a-1);
				vis[a-1]=1;
			}
		}
	}
	return 1;
}
signed main()
{
	int n,k;
	cin>>n>>k;
	cout<<bfs(n,k)<<endl;
	return 0;
}
2023/4/9 21:53
加载中...