69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define N 100000+10000
int n,k;
int a[N]={0},b[N]={0},vis[N]={0};
int front,end;
void bps(int x){
vis[x]=1;
front=0,end=0;
b[end++]=x;
while(front<end){
x=b[front++];
if(x==k) return;
if(!vis[x*2]&&x<=50000){
vis[x*2]=1;
a[x*2]=a[x]+1;
b[end++]=x*2;
}
if(!vis[x+1]&x<=99999){
vis[x+1]=1;
a[x+1]=a[x]+1;
b[end++]=x+1;
}
if(!vis[x-1]&&x>0){
vis[x-1]=1;
a[x-1]=a[x]+1;
b[end++]=x-1;
}
}
}
int main(){
scanf("%d%d",&n,&k);
bps(n);
printf("%d\n",a[k]);
return 0;
}