简单宽搜,点从0开始这点让我wa了两次
#include
#include
#include
using namespace std;
const int maxn=100001,inf=9999999;
int ans[maxn];
int que[1000001],front,end,text[maxn];
int main()
{
int n,k;
scanf("%d %d",&n,&k);
front=1,end=1;
que[front]=n;
for(int i=0;i<=maxn;i++) ans[i]=inf;
ans[n]=0;
memset(text,0,sizeof(text));
text[n]=1;
while(front<=end&&ans[k]==inf)
{
// printf("%d\n",front);
// printf("%d %d\n",que[front],ans[que[front]]);
int t=que[front++];
text[t]=0;
if(t*2<=maxn&&ans[t*2]>ans[t]+1)
{
ans[t*2]=ans[t]+1;
if(!text[t*2])
{
text[t*2]=1;
que[++end]=t*2;
}
}
if(t+1<=maxn&&ans[t+1]>ans[t]+1)
{
ans[t+1]=ans[t]+1;
if(!text[t+1])
{
text[t+1]=1;
que[++end]=t+1;
}
}
if(t-1>=0&&ans[t-1]>ans[t]+1)
{
ans[t-1]=ans[t]+1;
if(!text[t-1])
{
text[t-1]=1;
que[++end]=t-1;
}
}
}
printf("%d\n",ans[k]);
return 0;
}