Modern Cpp写法

结论就是与第一个大于1的数的下标位置有关,记该位置为idx(下标从0开始),观察样例就知道,如果idx是偶数,那么答案是"Alice",否则答案是"Bob"。另外,若ai全为1,即不存在大于1的数,此时手动造几组n比较小的样例就会发现,若n为奇数,则答案为"Alice",否则答案为"Bob",此时不难发现,若往数组a的最后添加一组{1, 2},再按照存在大于1的数处理也是对的,这样就不需要特判了。具体查找可以使用find_if函数。

#include <iostream>
#include <vector>
#include <algorithm>

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

  std::vector<int> a(n);
  for(int i = 0; i < n; i++){
    std::cin >> a[i];
  }
  a.insert(a.end(), {1, 2});

  int idx = std::find_if(a.begin(), a.end(), [&](int x){return x > 1;}) - a.begin();
  std::cout << (idx & 1 ? "Bob\n" : "Alice\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;
}