Codeforces Round #721 (Div. 2) B2. Palindrome Game (hard version) (博弈问题)

本文详细分析了Codeforces Round #721 (Div. 2) B2题——Palindrome Game的博弈策略。讨论了字符串初始为回文串和非回文串时,Alice和Bob的获胜策略。通过分类讨论和动态规划方法,揭示了不同情况下两人的最优操作,以确定游戏的胜者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://codeforces.com/contest/1527/problem/B2

题目大意:

有一个长度为n,(1<=n<=1000)的字符串,由字符'0'和'1'组成。

Alice和Bob进行游戏,一人操作一个回合,Alice先。

每个回合可以进行两种操作:

1,把某个字符‘0’变成'1',支付1元

2,若目前字符串不是回文串,且上个回合不是执行的操作2,则可以把字符串翻转,支付0元

最后字符串全部变为1时,游戏结束,此时花的钱少的人获胜。

本题有两个版本:

1,简单的版本:初始的时候字符串是回文串

2,复杂的版本:初始的时候字符串不一定是回文串

题解:

首先讨论下简单的版本,如何解决:

显然,由于初始字符串是回文,我们不用考虑字符1的数量和位置,我们只关心字符0的数量,接下来我们试试从最简单的开始分析

0个0,这时显然打平

1个0,这时显然后手赢

2个0,显然还是后手赢

3个0,先手可以先把中间的0变为1,然后此时BOB就面对两个0的情况,而两个0的情况是后手赢,此时的后手时变成了Alice,所以先手必赢

4个0,这种情况策略要多些,一种策略是Alice任意改变一个0,BOB翻转字符串,这种策略下去BOB只能打平。还有另外一种策略,Alice改变一个0,Bob改变对应对称位置的0,此时两个人打平,然后剩下两个0的情况,此时为后手赢,所以BOB能赢2元钱。

5个0,Alice操作中间的0,然后就变为4个0的情况,由前面的结论可知Alice可以赢1元钱

以此类推,若有偶数个0,BOB可以一直在Alic对称的位置操作,直到剩下两个0,此时BOB就必赢了。

若有奇数个0且个数大于1,Alice先操作中间的0,然后就变成了偶数个0的情况,而面对偶数个0是后手赢,所以先手必赢.

 

接下来讨论复杂的版本:

我们假设存在x个0,其对称位置的字符为1

那么Alice可以首先翻转字符串,Bob只能优先操作x个0的某个0,因为若操作对称位置也为0的0,那么相当于x+1,Alice下个回合又可以翻转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值