思路
- 要使得操作次数变短,则每次跳跃要尽量远。不难发现,每次让最左则的棋子跳跃即可。
- 设数轴上从左往右三颗棋子坐标分别为
,则
跳跃之后变为
。
- 用一个循环数组保存三个棋子的坐标位置。每次跳跃后都比较最右侧棋子是否
。
代码实现
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
{
int t;
cin >> t;
int a, b, c, n;
for (int i = 0; i < t; i++)
{
ll n;
ll arr[3];
cin >> arr[0] >> arr[1] >> arr[2] >> n;
int j = 0;
int ans = 0;
while (arr[(j + 2) % 3] < n)
{
arr[j % 3] = 2 * arr[(j + 2) % 3] - arr[j % 3];
j = (j + 1) % 3;
ans++;
}
cout << ans << "\n";
}
return 0;
}