1 条题解
-
0
解题思路: 本题可通过逆向思维,从给定的节点(i,j) 反向推导到根节点 (1, 1)。在反向推导过程中,如果 (i > j),说明最后一步是从左子节点到达当前节点,反之则是从右子节点到达。不断进行反向推导,同时记录向左和向右走的次数。
实现步骤
- 读取测试用例的数量。
- 对于每个测试用例:读取节点的坐标(i, j)。初始化向左和向右走的次数为 0,当(i, j)不等于(1, 1)时,进行逆向推导: 如果 i > j,则i减去j,并增加向左走的次数;如果i < j,则j减去i,并增加向右走的次数。 代码:
#include <iostream> using namespace std; int main() { int scenarios; cin >> scenarios; for (int i = 1; i <= scenarios; ++i) { int leftCount = 0, rightCount = 0; int a, b; cin >> a >> b; while (a != 1 || b != 1) { if (a > b) { int steps = (a - 1) / b; leftCount += steps; a -= steps * b; } else { int steps = (b - 1) / a; rightCount += steps; b -= steps * a; } } cout << "Scenario #" << i << ":" << endl; cout << leftCount << " " << rightCount << endl; cout << endl; } return 0; }
- 1
信息
- ID
- 1500
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者