做题记录 25.3.12
\(\textcolor{purple}\odot\) CF2032F Peanuts
\(dp\),令 \(f_{i,0}\) 表示 \(a_{i\sim n}\) 先手必败的方案数,\(f_{i,1}\) 表示 \(a_{i\sim n}\) 先手必胜的方案数
边界为 \(f_{n+1,0}=1\),答案为 \(f_{1,1}\)
令 \(w(l,r)=[\oplus_{i=l}^{r}a_i\ne0]\) 表示取区间 \([l,r]\) 进行普通 \(\operatorname{Nim}\) 先手是否必胜
令 \(w'(l,r)=[\oplus_{i=l}^{r}a_i\ne0]\oplus[\forall l\le i\le r,a_i=1]\) 表示取区间 \([l,r]\) 进行反常 \(\operatorname{Nim}\) 先手是否必胜
转移为
前缀和加双指针优化即可
时间复杂度 \(O(n\log n)\),瓶颈在于对 \(a\) 后缀异或和数组的离散化过程
\(\textcolor{blue}\odot\) CF2032E Balanced
以下默认下标模意义下映射到 \([1,n]\)
令答案为 \(b_{1\sim n}\),则相当于要求 \(a_i+2b_i+b_{i-1}+b_{i+1}\) 都相等
即对于任意 \(i\),有
令 \(c_i=b_i+b_{i+1}\),则化简为
由于 \(n\) 为奇数,由此可 \(O(n)\) 递推出 \(\Delta c_i=c_i-c_1\)
由于 \(\sum_{i=1}^n c_i=2\sum_{i=1}^n b_i\),\(\sum_{i=1}^n c_i\) 必须为偶数
若得到的 \(\sum_{i=1}^n\Delta c_i\) 为奇数,则取 \(c_1=2k+1\),否则取 \(c_1=2k\)
若取 \(c_1=x\) 时能得到一组 \(b\) 的整数解,则 \(c_1=x+2\) 时也能得到一组 \(b\) 的整数解
因此暂时带入 \(c_i=\Delta c_i+(c_1\bmod 2)\)
由此可得到 \(b\) 的一组整数解
令所有 \(b_i\) 减去 \(b\) 的最小值即可得到非负整数解
显然不存在无解情况
时间复杂度 \(O(n)\)
\(\textcolor{blue}\odot\) CF2030F Orangutan Approved Subarrays
显然合法区间的任意子区间也合法,因此考虑对于每个 \(r\) 求出最小的 \(l\) 使得 \([l,r]\) 合法,则可 \(O(1)\) 回答单个询问
对于一个区间 \([l,r]\),每种颜色第一次出现替换为对应颜色的左括号,最后一次出现替换为对应颜色的右括号(只出现一次则可忽略),定义得到的括号序列为该区间的括号序列
则询问区间合法当且仅当其任意子区间的括号序列都可匹配(同色的左右括号之间可以匹配)
从 \(1\) 到 \(n\) 枚举 \(r\),则 \(l\) 单调
考虑加入一个 \(r\) 后如何判断 \(l\) 是否需要右移
设 \(a_r\) 上一次出现在 \(a_p\),则相当于令 \(p\) 位置删去右括号,在 \(r\) 位置加上右括号
若存在一个 \([l,p)\) 中的左括号,其匹配到的右括号在 \(r\) 右侧,则不合法
线段树每个位置维护其匹配的右括号,若该位置为右括号则值为 \(0\)
时间复杂度 \(O(\sum n\log n)\)
\(\textcolor{purple}\odot\) CF2031F Penchick and Even Medians
先找到一对 \((x,y)\),使得 \(a_x\) 和 \(a_y\) 中一个 \(<\frac n2\),另一个 \(>\frac n2+1\)
剩下 \(n-2\) 个两两配对,每一对与 \(x,y\) 共四个数询问一次
若得到的结果为 \((\frac n2,\frac n2+1)\),则答案为这一对位置
若 \(\frac n2\) 和 \(\frac n2+1\) 之一在结果中,则 \(\frac n2\) 和 \(\frac n2+1\) 之一在这一对位置中
这样要么确定了答案,要么得到了两个位置对,则第一个的两个和第二个的两个,分别与 \(x,y\) 进行一次询问,若得到的结果为 \((\frac n2,\frac n2+1)\),则答案为询问的一对数
除找到 \((x,y)\) 一共用了 \(\frac{n-2}2+4\) 次查询(可以减少一次),问题转化为在 \(77-\frac n2\) 次内找到 \((x,y)\)
每次随机 \((x,y)\),然后查询 \(\{1,2,\cdots,n\}/\{x,y\}\),若结果为 \((\frac n2,\frac n2+1)\) 则得到一组合法的 \((x,y)\)
单次失败概率为 \(1-\frac{(\frac n2-1)^2}{\binom n2}=\frac{n^2+2n-4}{2n^2-2n}\),总失败概率为 \((\frac{n^2+2n-4}{2n^2-2n})^{77-\frac n2}\),当 \(n=100\) 时最大为 \(1.65\times 10^{-8}\),可过
\(\textcolor{blue}\odot\) CF2028F Alice's Adventures in Addition
令 \(f_{i,j}\) 表示 \(1\sim i\) 能否令和为 \(j\),则边界为 \(f_{0,0}=1\),答案为 \(f_{n,m}\),转移为
其中 \(w(l,r)=\prod_{i=l}^r a_i\)
显然每个 \(f_{i,\ast}\) 可压为一个 bitset,转移时相当于位移和按位或
发现对于一个 \(r\),\(w(l,r)=0\) 的 \(l\) 为一个前缀,\(w(l,r)>m\) 的暂时无效(若后面出现一个 \(0\) 则这一部分并入 \(=0\) 的前缀),\(0<w(l,r)\le m\) 的只有 \(O(\log m)\) 种值
用一个队列存下这 \(O(\log m)\) 段内 bitset 按位或的结果,并用两个 bitset 分别维护 \(=0\) 和 \(>m\) 的
时间复杂度 \(O(\sum \frac{nm}\omega\log m)\),空间复杂度 \(O(\frac{m\log m}\omega)\),常数较小
\(\textcolor{purple}\odot\) CF2029F Palindrome Everywhere
若同时存在 \(\operatorname{RR}\) 和 \(\operatorname{BB}\)(循环意义上的包含,即可以一个字符在头,一个字符在尾),则从两个 \(\operatorname{R}\) 之间出发到达两个 \(\operatorname{B}\) 之间,这条路径一定不回文,因此该字符串一定不合法
特判颜色都相同的情况
假定不存在 \(\operatorname{BB}\)(另一种情况是对称的),设字符串中 \(\operatorname{G}\) 的极长连续段长度为 \(a_1\sim a_k\)
显然合法性只和 \(a\) 的奇偶性有关
若 \(k=1\),显然可以令每条路径都只经过 \(\operatorname{G}\),显然合法
若 \(k>1\),且存在 \(1\le i<j\le k\) 使得 \(2\mid a_i\) 且 \(2\mid a_j\),则选择第 \(i\) 段第一个 \(\operatorname{R}\) 之后的位置到第 \(j\) 段第一个 \(\operatorname{R}\) 之前的位置的路径,其前缀 \(\operatorname{R}\) 数量为奇数,后缀 \(\operatorname{R}\) 数量为偶数,一定不回文,因此字符串一定不合法
若 \(k>1\),且 \(\forall 1\le i\le k,2\nmid a_i\),字符串可缩为 \((\operatorname G\operatorname B)^k\),取第一个 \(\operatorname G\) 之后的位置和第二个 \(\operatorname G\) 之后的位置,从两端同时出发,为了保证回文需要令每次经过的字符相同,发现若一边想要跳出所在 \(\operatorname{G}\) 的连续段,另一边需要从同样的方向跳出,两侧永远无法相遇,因此字符串也不合法
若 \(k>1\),且恰好存在一个 \(a_i\) 为偶数,则对于任意一对位置均可构造出回文路径
构造方法:
- 忽略段长,只保留奇偶性,设环为 \(\def\O{\operatorname }\def\B{\operatorname B}\cdots\O{GBGB}\,(\O{GG})^k\,\O{BGBG}\cdots\)
- 令 \(>\) 表示起点,\(<\) 表示终点
- 对于起点终点在同色段内的情况,直接从中穿过即可
- 对于 \(\def\O{\operatorname }\def\B{\operatorname B}\cdots\O{GB>GB}\,\O{GG}\,\O{BG<BG}\cdots\) 的情况,从起点出发向左穿过环的另一侧到达终点即可
- 对于 \(\def\O{\operatorname }\def\B{\operatorname B}\cdots\O{GBG>B}\,\O{GG}\,\O{BG<BG}\cdots\) 的情况,起点先向右到达 \(\operatorname{GG}\),同时终点反复穿越其右侧的 \(\operatorname{BG}\),起点到达 \(\operatorname{GG}\) 时终点到达 \(\operatorname{BG}\) 中间,起点向右穿过 \(\operatorname{GG}\) 段,终点来回穿越右侧的 \(\operatorname{G}\),起点穿越 \(\operatorname{GG}\) 段后,两侧同时向中间移动即可
- 对于 \(\def\O{\operatorname }\def\B{\operatorname B}\cdots\O{GBGB}\,\O{G>G}\,\O{BG<BG}\cdots\) 的情况,两侧同时向中间移动即可
- 对于 \(\def\O{\operatorname }\def\B{\operatorname B}\cdots\O{GBGB}\,\O{GG}>\,\O{BG<BG}\cdots\) 的情况,起点向左穿越 \(\operatorname{GG}\) 段的同时终点反复穿越左侧的 \(\operatorname G\),起点穿过 \(\operatorname{GG}\) 段两侧同时向外,从环的另一侧合并
时间复杂度 \(O(\sum n)\)
\(\textcolor{purple}\odot\) CF2027E1 Bit Game (Easy Version)
可转化为求出每个 \((x,a)\) 的 \(\operatorname{SG}\) 函数值
考虑压缩 \((x,a)\)
二进制下从高到低扫描 \(a\) 和 \(x\) 的二进制位,找到第一个 \(a\) 对应位为 \(1\) 而 \(x\) 为 \(0\) 的位,将 \(a\) 这一位置为 \(0\),将 \(a\) 中之后与 \(x\) 有交的位置为 \(1\)
这样调整后 \(a\) 为 \(x\) 的一个子集,且显然不改变 \(\operatorname{SG}\) 函数值
显然可以去掉 \(x\) 中高于 \(a\) 最高位的位,因为无法取这些位
然后去掉所有 \(a\) 和 \(x\) 中都是 \(0\) 的位,同样不改变函数值
调整后显然 \(x=2^k-1\),\(2^{k-1}\ge a\)
于是转化为给定 \(k\) 和 \(a\;(2^{k-1}\le a<2^k)\),令 \(f(0)=0\),\(f(i)=\operatorname{mex}_{1\le d\le \min(a,i-1),d\subseteq i} f(i-d)\),求出 \(f(2^k-1)\)
分为两段:
对于第一段,\(f(i)=\operatorname{popcount}(i)\),其相当于普通 \(\operatorname{Nim}\) 中的一个堆,共 \(\operatorname{popcount}(i)\) 个位,每次取走若干个,取完为败
因此当 \(a=2^k-1\) 时,\(f(2^k-1)=f(a)=\operatorname{popcount}(2^k-1)=k\)
当 \(a=2^k-2\) 时,\(f(2^k-1)=\operatorname{mex}_{1\le d\le 2^{k}-2}f(2^k-1-i)=\operatorname{mex}_{1\le d\le 2^k-2}f(d)\),而 \(1\sim 2^k-2\) 的 \(\operatorname{popcount}\) 不含 \(0\),因此 \(\operatorname{mex}\) 为 \(0\),即此时 \(f(2^k-1)=0\)
当 \(a=2^{k-1}\) 时,第 \(k\) 位和 \(1\sim k-1\) 位分离,因此转化为一个两堆石子的普通 \(\operatorname{Nim}\) 游戏,数量分别为 \(k-1\) 和 \(1\),函数值为 \((k-1)\oplus 1\)
当 \(2^{k-1}<a<2^k-2\) 时,有 \(f(2^k-1)=k\),证明
时间复杂度 \(O(n\log V)\)

浙公网安备 33010602011771号