1 条题解

  • 1
    @ 2026-8-9 15:18:59
    #include
    #define int long long
    using namespace std;
    const int N = 1e6 + 10;
    const int inf = 0x3f3f3f3f;
    int s , t;
    const int dis[4] = {1 , -1 , 2 , 2};
    bool vis[N * 2];
    struct node{
    	int num;
    	int step;
    	node(int xnum , int ystep){
    		num = xnum;
    		step = ystep;
    	}
    };
    bool in(int x){
    	return x > 0;
    }
    int bfs(int start){
    	queue<node> q;
    	q.push(node(start , 0));
    	vis[start] = true;
    	while(!q.empty()){
    		node now = q.front();
    		q.pop();
    		for(int i = 0 ; i < 4 ; i ++){
    			int tx;
    			if(i == 2){
    				tx = now.num * dis[i];
    			}else if(now.num % 2 == 0 && i == 3){
    				tx = now.num / dis[i];
    			}else if(i == 0 || i == 1){
    				tx = now.num + dis[i];
    			}
    			if(in(tx) && !vis[tx] && tx <= N){
    				if(tx == t){
    					return now.step + 1;
    				}else{
    					vis[tx] = true;
    					q.push(node(tx , now.step + 1));
    				}
    			}
    		}
    	}
    }
    
    signed main(){
    	freopen("time.in" , "r" , stdin);
    	freopen("time.out" , "w" , stdout);
    	int n;
    	cin >> n;
    	while(n --){
    		memset(vis , 0 , sizeof(vis));
    		cin >> s >> t;
    		cout << bfs(s) * 2 << endl;
    	}
    	
    	
    	
    	return 0;
    }
    

    信息

    ID
    557
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    234
    已通过
    19
    上传者