#include<iostream>
#include<queue>
using namespace std;
struct node{
	int idx,cnt;
};
int n,k;
bool s[100010];
queue<node> q;
void bfs(int x){
	s[x]=1;
	q.push({x,0});
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(t.idx==k){
			cout<<t.cnt;
			return;
		}
		for(int i=0;i<3;i++){
			if(i==0){
				int nx=t.idx-1;
				if(nx<=k&&s[nx]==0){
					s[nx]=1;
					q.push({nx,t.cnt+1});
				}
			}
			else if(i==1){
				int nx=t.idx+1;
				if(nx<=k&&s[nx]==0){
					s[nx]=1;
					q.push({nx,t.cnt+1});
				}
			}
			else{
				int nx=t.idx*2;
				if(nx<=k&&s[nx]==0){
					s[nx]=1;
					q.push({nx,t.cnt+1});
				}
			}
		}
	}
}
int main(){
	cin>>n>>k;
	bfs(n);
	return 0;
}

4 comments

  • 1

Information

ID
738
Time
1000ms
Memory
256MiB
Difficulty
7
Tags
# Submissions
144
Accepted
33
Uploaded By