参考程序:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义一个结构体,存储箱子编号和硬币数量
struct Box {
int id; // 箱子编号
int coins; // 硬币数量
};
// 自定义排序规则
// 先按硬币数量升序,如果相等则按编号升序
bool cmp(const Box &a, const Box &b) {
if (a.coins != b.coins) return a.coins < b.coins;
return a.id < b.id;
}
int main() {
int T; // 测试组数
cin >> T;
while (T--) {
int n; // 箱子总数
cin >> n;
vector<Box> jerry; // Jerry 负责奇数编号
vector<Box> tom; // Tom 负责偶数编号
for (int i = 1; i <= n; i++) {
int c;
cin >> c;
if (i % 2 == 1) {
jerry.push_back({i, c});
} else {
tom.push_back({i, c});
}
}
// 如果 n 是奇数,Jerry 必胜
if (n % 2 == 1) {
cout << "Jerry" << endl;
continue;
}
// 分别对 jerry 和 tom 的箱子排序
sort(jerry.begin(), jerry.end(), cmp);
sort(tom.begin(), tom.end(), cmp);
// 取出最小的(排序后第一个)
Box minJerry = jerry[0];
Box minTom = tom[0];
if (minJerry.coins > minTom.coins) {
cout << "Jerry" << endl;
} else if (minJerry.coins < minTom.coins) {
cout << "Tom" << endl;
} else {
// 硬币相等,比较编号:编号大的赢
if (minJerry.id > minTom.id) {
cout << "Jerry" << endl;
} else {
cout << "Tom" << endl;
}
}
}
return 0;
}