用户工具

站点工具


2022-2023:teams:kunkunkun:2022-nowcoder-10

这是本文档旧的修订版!


2022 牛客暑期多校训练营10

F-Shannon Switching Game?

题目大意:给定一个无向图,初始时有一个token在s点,两个玩家Join Player和Cut Player轮流行动,CutPlayer先动。Cut Player每次可以移除一条和token所在位置相邻的边, Join Player每次可以将token沿着一条未删除边移动, 如果token在某刻被移动到t则Join Player获胜,否则Cut Player获胜,求双方最优策略下的胜者。
从 $t$ 考虑,能够走到 $t$ 的点与 $t$ 必有两条及以上的边相连,将这些点和 $t$ 加入集合,若其他点有两条及以上的边连向该集合,则再将这些点加入集合,最后若 $s$ 在集合中则 Join Player 胜利,否则 Cut Player 胜利。
时间复杂度 $O(n+m)$

G

题目大意:给定只包含'r'、'e'、'd'、'?'四种字符的字符串,其中'?'可表示为任意字符,询问该字符串是否能被拆为若干个“red”

和括号匹配类似,要求从左到右$cnt( r )\geq cnt(e)\geq cnt(d)$,并且从右到左$cnt( r )\leq cnt(e)\leq cnt(d)$

字母'e'的限制是关键,如果解决了字母'e'的限制,只要对所有'?',从左到右依次放'r'、'e'、'd'即可

用并查集维护某位置左边最近'?'的位置,然后从左到右扫一遍字符串,若'e'的数量不够,则把左边最近的'?'改为'e'

同理,从右向左做一遍类似的操作,就可以解决'e'的限制

解决'e'的限制之后,按顺序填好剩下'?'的值,然后检查字符串是否合法

2022-2023/teams/kunkunkun/2022-nowcoder-10.1661593761.txt.gz · 最后更改: 2022/08/27 17:49 由 polaraid