2025.1.7 CFVP 题解

gym 579122

CF1417A Copy-paste

每次将最小的 \(a_i\) 尽量加到其他上面,总答案为 \(\sum_{i=2}^n \frac{k-a_i}{a_1}\)(假定 \(a_1\) 是最小的)

时间复杂度 \(O(\sum n)\)

代码

CF1592B Hemose Shopping

若距离为 \(k\),则 \([1,n-k]\cup[k+1,n]\) 内的数可以任意交换,比较排序后和排序前是否该范围外的数是否相同即可

时间复杂度 \(O(\sum n\log n)\)

代码

CF1469C Building a Fence

等价于询问是否存在整数序列 \(t_{1\sim n}\) 同时满足:\(t_1=h_1\)\(t_n=h_n\)\(\forall 1<i\le n(|t_i-t_{i-1}|<k)\)\(\forall 1\le i\le n(h_i\le t_i< h_i+k)\),从 \(1\)\(n\) 递推,跟新当前位置 \(t_i\) 的取值范围,最后查看 \(t_n\) 是否在范围内即可

时间复杂度 \(O(\sum n)\)

代码

CF1344B Monopole Magnets

显然若有解,则答案为四联通块数量,考虑判定是否有解

若存在全白行但不存在全白列,则无解。反之若存在全白列但不存在全白行也无解

若存在一个白色格子,其上方和下方都存在黑色格子,或其左侧和右侧都存在黑色格子,则无解

可证其他情况均有解

时间复杂度 \(O(n^2)\)

代码

CF1679E Typical Party in Dorm

对于每个可能成为回文串的子串(即不存在两个互相对称的位置,满足两者填的字符确定且不同),可以表示为二元组 \((k,c)\),表示若询问的字符集为 \(c\) 的超集,则其对答案的贡献为字符集大小的 \(k\) 次幂(可枚举中心暴力扩展 \(O(n^2)\) 求出所有二元组)

\(Ct_{i,s}\) 表示字符集大小为 \(i\) 且为 \(s\) 的超集时,答案的增加量,其可由之前求出的二元组直接得到

对每个 \(Ct_{i,\ast}\) 做高维前缀和,则 \(Ct_{i,s}\) 表示字符集大小为 \(i\) 且等于 \(s\) 时的答案

设询问的字符集为 \(s\),则答案为 \(Ct_{|s|,s}\)

时间复杂度 \(O(n^2+c^22^c+q)\)(其中 \(c\) 为字符集大小 \(17\)

代码

CF1369F BareLee

\(f_{i,W/L}\) 表示第 \(i\) 轮的先手在最后是否有必胜(\(W\))/ 必败(\(L\))策略

\(W(s,e)\) 表示起始值为 \(s\)、上界为 \(e\) 时,先手是否有必胜策略

\(L(s,e)\) 表示起始值为 \(s\)、上界为 \(e\) 时,先手是否有必败策略

则边界为 \(f_{n,W}=W(s_n,e_n),f_{n,L}=L(s_n,e_n)\),答案为 \(f_{1,W}\)\(f_{1,L}\)

转移为

\[f_{i,W}=(L(s_i,e_i)\land f_{i+1,W})\lor(W(s_i,e_i)\land \lnot f_{i+1,W}) \]

\[f_{i,L}=(L(s_i,e_i)\land f_{i+1,L})\lor(W(s_i,e_i)\land \lnot f_{i+1,L}) \]

两式前一个括号显然,后一个括号中 \(f_{i+1,W}\) 表示之后部分先手有必胜策略,\(\lnot f_{i+1,W}\) 即为先手无必胜策略,因此后手必胜,第二个式子同理

问题转化为快速求 \(L(s,e)\)\(W(s,e)\)

\(L(s,e)=W(s,e//2)\),因为若 \((s,e//2)\) 先手有必胜策略,相当于后手下一步无论如何都会超过 \(e//2\),但显然不会超过 \(e\),因此后手操作完后,先手令 \(s\gets s\times 2\) 一定超过了 \(e\),有必败策略;反之可用类似方法证明若 \(W(s,e//2)=0\) 则先手必败

考虑计算 \(W(s,e)\)

\(s>e\)\(W(s,e)=1\),当 \(s=e\)\(W(s,e)=0\),两者显然

\(e\) 为奇数,且当前 \(s\) 为偶数,则先手令 \(s\) 加一,若后手还能操作则无论如何都会令 \(s\) 变为偶数,显然此时 \(s+1\le e\),因此仍然为 \(e\)\(s\) 偶的局面,先手必胜

反之若 \(e\) 为奇数且 \(s\) 为奇数,若先手可操作,则无论如何操作都会使 \(s\) 变为偶数,后手必胜,先手必败

考虑 \(e\) 为偶数的情况

\(2s>e\)\(s\) 为奇数,则类似 \(e\) 奇数 \(s\) 偶数的方式,先手每次 \(+1\),先手必胜;若 \(2s>e\)\(s\) 为偶数,则先手只能 \(s\gets s+1\),后手必胜,先手必败

\(2s\le e,4s>e\),则先手令 \(s\gets s\times 2\) 变为 \(2s>e\)\(s\) 为偶数的状态,后手必败,先手必胜

\(4s\le e\),则 \(W(s,e)=W(s,e//4)\),因为若 \(W(s,e//4)=1\),则存在一种方式使得后手下一步无论如何都会超过 \(e//4\),即变为 \(2s\le e,4s>e\) 的状态,先手必胜;反之可证若 \(W(s,e//4)=0\) 则先手必败,方法类似

总时间复杂度 \(O(n\log V)\),常数不大

代码

参考

posted @ 2025-01-07 14:16  Hstry  阅读(12)  评论(0)    收藏  举报