对两个节点分别求其到达根的路径序列,然后再求公共后缀即可
#include<iostream>
#include<vector>
using namespace std;
vector<int> getPath(int x){
vector<int> path;
while(x!=0){
path.push_back(x);
x/=2;
}
return path;
}
int main(){
int x,y;
while(cin>>x>>y){
vector<int> a=getPath(x),b=getPath(y);
vector<int>::reverse_iterator it1 = a.rbegin();
vector<int>::reverse_iterator it2 = b.rbegin();
while(*it1==*it2){
it1++;
it2++;
if(it1==a.rend()||it2==b.rend()) break;
}
cout<<*(it1-1)<<endl;
}
return 0;
}

京公网安备 11010502036488号