枚举其中一种可乐的数量(此处为蜂蜜可乐)记为j,另一种可乐的数量即为k = N - j,模拟直至无法进行兑换,取最大值即为答案。

粗略估一下时间复杂度为O(T * N * log),此处的log应该是与a和b相关的一个对数常数。最大的数据量大概在1E6到1E7左右,因此不会超时。

#include <iostream>

void solve(){
  int n, a, b;
  std::cin >> n >> a >> b;

  int ans = 0;

  for(int i = 0; i <= n; i++){
    int j = i;
    int k = n - j;
    int res = n;

    while(j >= a || k >= b){
      if(j >= a){
        k += j / a;
        res += j / a;
        j %= a;
      }
      if(k >= b){
        j += k / b;
        res += k / b;
        k %= b;
      }
    }
    ans = std::max(ans, res);
  }

  std::cout << ans << "\n";
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cout.tie(nullptr);

  int T = 1;
  std::cin >> T;

  for(int i = 0; i < T; i++){
    solve();
  }

  return 0;
}