有一个直线魔法阵其范围为[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;
}