题目描述
在计算机科学中,二叉树是一种普通的数据结构。在本题中,给出一棵无限的二叉树,结点被标识为一对整数,构造如下:
树根被标识为整数对(1, 1);
如果一个结点被标识为(a, b),那么其左子树树根被标识为(a + b, b),其右子树树根被标识为(a, a + b)。
给出上述二叉树的某个结点标识(a, b),假定从树根到这一给定的结点是沿着最短的路径走,你能给出多少次要向左子树走,多少次要向右子树走?
输入
第一行给出测试用例个数。每个测试用例占一行,由两个整数i和j组成(1<=i, j<=2*10^9),表示结点的标识(i, j)。假定给出的结点都是有效的结点。
输出
对每个测试用例,第一行为“Scenario #i:”,其中i是测试用例编号,从1开始编号;然后输出一行给出两个整数l和r,中间用1个空格隔开,其中l是从树根到该结点要向左子树走的次数,r是从树根到该结点要向右子树走的次数。在每个测试用例结束后输出一个空行。
样例输入Copy
3 42 1 3 4 17 73
样例输出Copy
Scenario #1: 41 0 Scenario #2: 2 1 Scenario #3: 4 6
代码:
#include<iostream>
#include<iomanip>
#include<string>
#include<