A23253. 硬币游戏
填空题
较难
知识点
题目描述
硬币游戏
题目描述
Jerry和Tom正在进行一局游戏。他们准备了n个盒子,编号为1到n,其中i号盒子装有ai枚硬币。他们将这n个盒子围成一圈。游戏规则如下:
1)Jerry和Tom轮流从某一个盒子中取走至少一枚硬币,Jerry先手从1号盒子开始取;
2)如果前一个玩家取的是i号盒子中的硬币,那么当前玩家必须从i+1号盒子中取硬币。特别地,如果前一个玩家取的是n号盒子中的硬币,那么当前玩家必须从1号盒子中取硬币。
3)如果轮到某位玩家时对应盒子中没有硬币,则该玩家失败。
假设Jerry和Tom都采取最优策略,请问谁会赢?
输入描述
本题每个测试点包含多组测试数据,格式如下:
第一行输入一个整数T(1≤T≤100),表示数据组数;
对于每组测试数据,第一行输入一个整数n(1≤n≤1000),表示盒子的数量;
第二行输入n个整数ai(1≤ai≤109),分别表示1号到n号盒子中的硬币数量,整数之间以一个空格隔开。
输出描述
输出T行,每行输出一个字符串,对于第i组测试数据,如果Jerry能赢,则输出"Jerry",否则输出"Tom"。
样例输入
2
1
10
2
30 50样例输出
Jerry
Tom参考答案
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int t,n,a[N];
int main() {
cin>>t;
while(t--) {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
// 奇数个盒子,直接判定 Jerry 赢
if(n%2) puts("Jerry");
else {
int mn=2e9,pos;
// 遍历找硬币数最少的盒子,记录数量和位置
for(int i=1;i<=n;i++) {
if(a[i]<mn) {
mn=a[i];
pos=i;
}
}
// 根据最少硬币盒子的位置奇偶性判断赢家
if(pos%2) puts("Tom");
else puts("Jerry");
}
}
return 0;
}
上一题
下一题