1000. 完全二叉树
| ||||||
| ||||||
Description
如下图,由正整数1,2,3,...组成一棵无限大的满二叉树。从某一个结点到根结点(编号是1的结点)都有 一条唯一的路径,比如10到根节点的路径是(10,5,2,1),由4到根节点的路径是(4,2,1),从根结点1到根结点 的路径上只包含一个结点1,因此路径是(1)。 对于两个结点X和Y,假设它们到根结点的路径分别是(X1,X2,...,1)和(Y1,Y2,...,1)(这里显然有X=X1,Y=Y1), 那么必然存在两个正整数i和j,使得从Xi和Yj开始,有Xi=Yj,Xi+1=Yj+1,...,现在的问题就是,给定X和Y, 要求Xi(也就是Yj)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... ... ... ...
Input
输入的第一行是一个整数T,表示测试用例个数。以下T行,每行对应一个测试用例。
Output
对每个测试用例,单独一行输出一个整数Xi。
Sample Input
1 10 4 7 13
Sample Output
2 3 |
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int x, y;
cin>>x>>y;
while(x!=y)
{
if(x>y)
x/=2;
else y/=2;
}
cout<<x<<endl;
}
return 0;
}