题目链接:https://codeforces.com/contest/1527/problem/B2
题目大意:
有一个长度为的字符串,由字符'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下个回合又可以翻转