[AGC002E] Candy Piles - 博弈论

这篇博客介绍了AGC002E问题,即糖果堆博弈论的解题思路。通过将糖果堆排序并转化为网格模型,分析操作转化为在网格中行走,从而确定胜负状态。关键在于理解同一条对角线上点的胜负状态相同,以及判断起点是否为必败点的规律。文章还提供了代码实现。
摘要由CSDN通过智能技术生成

桌上有 N 堆糖果,第 i 堆糖果有Ai 个糖。两人在玩游戏,轮流进行,每次进行下列两个操作中的一个

1.将当前最大的那堆糖果全部吃完
2.将每堆糖果吃掉一个

吃完的人输,假设两人足够聪明,问谁能必胜 1<=n<=10^5 1<=ai<=10^9
输出 First(表示第一个人必胜),或 Second(表示第二个人必胜

思路

可以把糖果降序排序,转换成 n 列网格,每列的高度为每堆的数量,如下图所示

起点从 (1,1) 开始,操作 1 可转换为向右走一格,操作 2 可转换为向上走一格,当走到边界时即为吃完所有糖果

所以可以得到边界的点都为必败点,若一个点上面或右边有必胜点这个点一定为必败点(对手一定会走到必胜点),否则为必胜

若 (1,1) 为必败点则先手必胜(可看为后手操作到了 (1,1),所以 (1,1) 是后手的胜负状态),反之亦然

然后仔细观察发现同一条对角线上的点胜负状态一定相同,所以可以计算对角线上最后一个点的胜负来判断起点的胜负

然后找规律,若对角线上最后一个点到最上面或到最右边的距离有奇数,这个点即为必败点

代码

/*******
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值