[nowcoder1100B]仓鼠的石子游戏

27 篇文章 0 订阅

题目

传送门 to nowcoder

题目描述
仓鼠和兔子被禁止玩电脑,无聊的他们跑到一块空地上,空地上有许多小石子。

兔子捡了很多石子,然后将石子摆成 n n n 个圈,每个圈由 a i a_i ai 个石子组成。

然后兔子有两根彩色笔,一支红色一支蓝色。

兔子和仓鼠轮流选择一个没有上色的石子涂上颜色,兔子每次可以选择一个还未染色的石子将其染成红色,而仓鼠每次可以选择一个还未染色的石子将其染成蓝色。

仓鼠和兔子约定,轮流染色的过程中不能出现相邻石子同色,谁不能操作他就输了。

假设他们两个都使用了最优策略来玩这个游戏,并且兔子先手,最终谁会赢得游戏?

输入格式
第一行输入一个正整数 T T T ,表示有 T T T 组测试案例。

每组测试案例的第一行输入一个 n n n ,表示有 n n n 圈石子。 第二行输入 n n n 个正整数 a 1 , a 2 , a 3 , … , a n a_1,a_2,a_3,\dots,a_n a1,a2,a3,,an ,表示每个圈的石子数量。

输出格式
对于每组测试案例,如果兔子赢了,输出“ r a b b i t \tt rabbit rabbit”(不含引号)如果仓鼠赢了,输出“ h a m s t e r \tt hamster hamster”(不含引号)。

数据范围与约定
对于前 100 % 100\% 100% 的数据,满足 1 ⩽ n ⩽ 1 0 3 , 1 ⩽ a i ⩽ 1 0 9 , 1 ⩽ T ⩽ 1 0 2 1\leqslant n \leqslant 10^3,1\leqslant a_i\leqslant 10^9,1\leqslant T\leqslant 10^2 1n103,1ai109,1T102

思路壹

博弈题当然要 从最简单的情况开始找规律 啊!

其实,只有一个环的情况下,先手胜当且仅当 a = 1 a=1 a=1 (只有一个石子)。

可以考虑 对抗性 的策略:

假设 2 ∣ n 2|n 2n ,那么选择一条线作为对称轴,对称放置。假设 n n n 为奇数,在先手的位置旁边作为对称轴,对称放置。

在这里插入图片描述

故先手必败。现在把问题推向更复杂的情况:

假设有偶数个 a = 1 a=1 a=1 的环,先手涂一个 a = 1 a=1 a=1 的环,后手也涂一个;先手在哪个环里操作,我也在哪个环里操作。故后手必胜。

与之相对的,如果有奇数个 a = 1 a=1 a=1 的环,先手涂一个之后,就变成了上方的情况。 则先手必胜。

思路贰

本蒟蒻作者有一个不太博弈的方法……

思路壹的本质是,你能涂多少个,我也能涂多少个。

这提示我们计算每个人究竟能够操作多少次。如果先手的可操作次数 ≤ \le 后手的可操作次数,那么先手将失败。

假设目前已经没有人可以操作了,考虑一个没有被涂色的石头,一定是一边是红色、一边是蓝色。

将所有的白石头拿走,剩下的环就会是红蓝相间的。不拿发现,这样的环上,红色点和蓝色点数量相同。

而且这 与操作顺序无关!无论是“兔子你随便涂,涂爽了再让我涂”还是“一人涂一次”,最后的红蓝点数量相同。

那么我们就要抢夺 a = 1 a=1 a=1 的环!因为这会拉开差距。

那么偶数的时候回平分秋色,回到普通环上,先手负(其可操作次数与后手相同);奇数时先手略高一筹,后手负(其可操作次数比先手少 1 1 1 )。得到了一样的结论。

代码

略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值