Codeforces Round #557 (Div. 1) 简要题解

Codeforces Round #557 (Div. 1) 简要题解

codeforces

A. Hide and Seek

枚举起始位置(a),如果(a)未在序列中出现,则对答案有(2)(3)的贡献。

(a)在序列中出现,找到(a)第一次出现的位置(x),则说明在(x)位置之前需要把(a)移动到(a+1)(a-1)处,只需要判断(x)后面有没有(a+1),有没有(a-1)。对每种数字记录第一次和最后一次出现位置即可。
code

B. Chladni Figure

旋转的角度(k)一定是(n)的约数。暴力枚举约数判断即可,复杂度(O(nsigma_0(n)))
code

C. Thanos Nim

结论是后手必胜当且仅当局面中的最小值个数超过一半,因为当最小值个数超过一半时操作必改变最小值,且操作后最小值个数不超过一半,而在最小值个数不超过一半时显然存在一种操作策略可以不改变最小值,而使操作后最小值个数超过一半。
code

D. Palindrome XOR

(n)为读入的字符串长。显然(b)的长度就是(n),且(a)的长度小于(n)

枚举(a)的长度(m),这样就一共有(n+m)(01)变量待确定,这(n+m)(01)变量之间存在一些相等或不等的关系,同时还有一些变量被强制赋值,可以新建两个点表示数值(0/1)后,把限制关系视作边(相等边权为(0),不等边权为(1))建出图,若图中不存在奇环则答案为(2)的连通块个数减(1)次方,否则答案为(0)

复杂度(O(n^2))
code

E. Rainbow Coins

对每个(i)求出是否和(i-1)(i+1)相同((2)次询问),可以将序列分割成若干段,保证相邻两端颜色不同。接下来需要求每一段的颜色,假设第一段的颜色为(0),第二段的颜色为(1),然后就只需要知道第(i)段和第(i-2)段的颜色是否相同就行了((2)次询问)。共计(4)次询问。
code

F. Zigzag Game

首先按照剧本我们应该选( ext{Bob}),因为( ext{Bob})才是实际意义上的先手。

这是一个二分图博弈的模型,这个模型中关键的一点在于:求出二分图某个满足一定条件的匹配,接着先手就只要按照剧本沿匹配边走就能( ext{win})了。

考虑这个匹配需要满足什么样的性质。不失一般性地,假设( ext{Alice})选择了( ext{Increasing})并选择了一个左侧节点。不是这种情况的话可以通过将边权取反到达相同的结果。

假设博弈过程中存在连续的三次操作(w o x o y o z),其中(w o x)(y o z)( ext{Bob})走的,也即,((w,x),(y,z))两条边在匹配中。此时我们的要求是在( ext{Alice})走到(y)后,( ext{Bob})能够走到(z),也即(val(x,y)>val(y,z)),当然这里对(val(x,y))也是有限制的,即(val(x,y)>val(w,x))

可知上述限制是对匹配的唯一限制。也就是说,匹配不合法当且仅当存在((w,x)in P,(y,z)in P)使得(val(w,x)<val(x,y)<val(y,z))

这是一个稳定婚配的模型,左侧的每个点对右侧点的偏好值与边权负相关,右侧的每个点对左侧点的偏好值与边权正相关。求出一组稳定婚配后按照剧本走就好了。

code

原文地址:https://www.cnblogs.com/zhoushuyu/p/10816560.html