测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题