思路

  • 要使得操作次数变短,则每次跳跃要尽量远。不难发现,每次让最左则的棋子跳跃即可。
  • 设数轴上从左往右三颗棋子坐标分别为,则跳跃之后变为
  • 用一个循环数组保存三个棋子的坐标位置。每次跳跃后都比较最右侧棋子是否

代码实现

#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;
}