**简易版和繁难版的唯一区别是,简易版中的给定字符串 $s$ 最初是一个回文字符串,而繁难版中的这一条件并不总是正确的。
回文字符串是指从左到右和从右到左读法相同的字符串。例如,"101101 "是一个回文字符串,而 "0101 "不是。
爱丽丝和鲍勃正在一个长度为 $n$ 的字符串 $s$ 上玩游戏,这个字符串由字符 "0 "和 "1 "组成。双方轮流玩,爱丽丝先玩。
在每个回合中,玩家可以执行以下操作之一:
选择任意 $i$ ( $1 \le i \le n$ ),其中 $s[i] =$ 为'0',并将 $s[i]$ 改为'1'。0",并将 $s[i]$ 改为 "1"。支付 1 美元。
反转整个字符串,支付 0 美元。只有当字符串目前***不是回文字符串,并且上一次操作不是反转时,才允许进行此操作。也就是说,如果爱丽丝反转了字符串,那么鲍勃下一步就不能反转,反之亦然。
反转字符串是指将字符串中的字母从最后一个重新排序到第一个。例如,"01001 "在反转后会变成 "10010"。
当字符串中的每个字符都变成 "1 "时,游戏结束。到此为止,花费最少的玩家获胜,如果双方花费相同,则为平局。如果双方都以最佳方式进行游戏,输出结果是 Alice 赢、Bob 赢还是平局。
">Palindrome Game (hard version)
Palindrome Game (hard version)
Created by LXC on Tue May 7 23:11:15 2024
https://codeforces.com/problemset/problem/1527/B2
ranting: 1900
tag: constructive algorithms, games
problem
**简易版和繁难版的唯一区别是,简易版中的给定字符串 $s$ 最初是一个回文字符串,而繁难版中的这一条件并不总是正确的。
回文字符串是指从左到右和从右到左读法相同的字符串。例如,”101101 “是一个回文字符串,而 “0101 “不是。
爱丽丝和鲍勃正在一个长度为 $n$ 的字符串 $s$ 上玩游戏,这个字符串由字符 “0 “和 “1 “组成。双方轮流玩,爱丽丝先玩。
在每个回合中,玩家可以执行以下操作之一:
- 选择任意 $i$ ( $1 \le i \le n$ ),其中 $s[i] =$ 为’0’,并将 $s[i]$ 改为’1’。0”,并将 $s[i]$ 改为 “1”。支付 1 美元。
- 反转整个字符串,支付 0 美元。只有当字符串目前***不是回文字符串,并且上一次操作不是反转时,才允许进行此操作。也就是说,如果爱丽丝反转了字符串,那么鲍勃下一步就不能反转,反之亦然。
反转字符串是指将字符串中的字母从最后一个重新排序到第一个。例如,”01001 “在反转后会变成 “10010”。
当字符串中的每个字符都变成 “1 “时,游戏结束。到此为止,花费最少的玩家获胜,如果双方花费相同,则为平局。如果双方都以最佳方式进行游戏,输出结果是 Alice 赢、Bob 赢还是平局。
solution
分析面对回文串时,先手与后手所需要的钱数。
然后分析非回文串,先手可以通过反转操作,不断的让后手付钱,最后让先手面对回文串,或让后手面对回文串。二者取最优。
code
1 |
|