做题记录 25.3.17
\(\textcolor{purple}\odot\) CF1997F Chips on a Line
首先发现每个操作都是可逆的,然后发现对于任意局面都可以先全部移到 \(1\) 位置
对于局面 \(a_{1\sim x}\),令 \(F_i\) 表示一个 \(i\) 位置的移到 \(1\) 位置后的数量,则最终 \(1\) 位置上的数量为 \(\vec a^T\vec F\),令其为该局面的值,发现 \(F\) 为斐波那契数列
一个局面的代价为该局面的值拆分为斐波那契数的最小项数,即斐波那契编码中 \(1\) 的数量(不含额外增加的一个)
对于 \(a_{1\sim x}\;(\sum a_i=n)\),局面的值不超过 \(nF_x\)
对于每个 \(1\le i\le nF_x\),求出其拆分的最小项数 \(s_i\),容易 \(O(nF_x\log\log nF_x)\)(二分出拆分最后一项,其中 \(\log nF_x\) 为可能拆出斐波那契数的最大下标)或 \(O(nF_x)\)(双指针)求出
\(dp\) 求出 \(f_i\),表示值为 \(i\) 的局面数,即把 \(i\) 拆为恰好 \(n\) 个 \(f_{1\sim x}\) 中数的和(可重)非方案数,即完全背包问题,时间复杂度 \(O(\sum_{i=1}^n\sum_{j=1}^x iF_j)=O(n^2F_x)\),空间复杂度 \(O(n^2F_x)\)
则答案为 \(\sum_{i=1}^{nF_x} [c_i=m]f_i\)
\(\textcolor{purple}\odot\) CF1995E1 Let Me Teach You a Lesson (Easy Version)
每个 \(i\) 向 \(i+n\) 连无向边,\(2i-1\) 向 \(2i\) 连无向边,可得若干环,显然每个环之间独立
当 \(2\mid n\) 时,共有 \(\frac n2\) 个四元环,第 \(i\) 个四元环为 \((2i-1)-(2i)-(2i+n)-(2i-1+n)\)
要么 \((2i-1,2i)\) 和 \((2i+n,2i-1+n)\) 匹配,要么 \((2i-1,2i+n)\) 和 \((2i,2i-1+n)\) 匹配,两种情况取极差较小的即可
时间复杂度 \(O(n)\)
当 \(2\nmid n\) 时,所有点在同一环上
发现 \(a_{2i-1}+a_{2i}\) 一共只有 \(O(n)\) 种情况,将其排序后双指针(显然区间满足单调性),转化为 \(O(n)\) 个检查 \((mn,mx)\) 是否合法的子问题
将 \(a_1\sim a_{2n}\) 重排为 \(a_1,a_2,a_{n+2},a_{n+3},a_3,a_4,\cdots\),其中第 \(2i-1\) 个和第 \(2i\) 个为计算 \(\min,\max\) 的一组,第 \(2i-2\) 和第 \(2i\) 个可互相交换,容易通过 \(dp\) 判断其是否合法
时间复杂度 \(O(\sum n^2)\)
\(\textcolor{purple}\odot\) CF1995E2 Let Me Teach You a Lesson (Hard Version)
将判断中的 \(dp\) 视为 \(n\) 个矩阵相乘的形式(\((|,\&)\) 矩乘),发现修改次数为 \(O(n)\) 的,于是使用线段树维护矩阵之积即可,时间复杂度 \(O(\sum n\log n)\)
\(\textcolor{blue}\odot\) CF1995D Cases
令 \(T_i=\{s_j\mid i\le j<i+k\}\),则选出的集合 \(S\) 合法当且仅当 \(s_n\in S\) 且 \(\forall 1\le i\le k,S\cap T_i\ne\mathbb\emptyset\)
令 \(U=\{a,b,c,\cdots\}\),则 \(S\) 合法等价于 \(S\nsubseteq \complement_U\{s_n\}\) 且 \(S\nsubseteq\complement_U T_i\)
先标记 \(\complement_U \{s_n\}\),然后对于每个 \(T\) 标记 \(\complement_U T_i\) 的所有子集,最终没有被标记的最小集合大小即为答案
用高位后缀和优化,时间复杂度 \(O(n+c2^c)\)
\(\textcolor{blue}\odot\) CF1994G Minecraft
对于给定的 \(a_{1\sim n}\) 和 \(s\),令 \(cnt_x\) 表示第 \(x\) 位为 \(1\) 的 \(a_i\) 数量,则等价于查询是否存在 \(t_{1\sim x}\;(t_i\in\{cnt_i,n-cnt_i\})\),使得 \(\sum_{i=1}^k2^{i-1}t_i=s\)
直接 \(dp\) 即可,时间复杂度 \(O(\sum nk)\)
\(\textcolor{blue}\odot\) CF1994F Stardew Valley
在选择所有必经边的基础上决定每条非必经边是否选择,使得在选出的子图上每个点的度数都是偶数
先算出选择必经边后每个点度数的奇偶性
用非必经边建出图,每个连通块分别处理,不在 \(\text{dfs}\) 树上的任意选择,在 \(\text{dfs}\) 树上的边将度数配为偶数
若存在一个连通块的根无法配为偶数则无解
否则用所有选择的边建出图,求出图的欧拉回路即可
时间复杂度 \(O(\sum (n+m))\)
\(\textcolor{purple}\odot\) CF1993F2 Dyn-scripted Robot (Hard Version)
令 \((dx_i,dy_i)\) 为 \(i\) 时刻相对于原点的偏移量,则答案为
令 \(rx=(-dx_i)\bmod 2w\),则
令 \(gx=\gcd(2w,dx_n)\),则该方程有解当且仅当 \(gx\mid rx\)
令 \(ix=\left(\frac{dx_n}{gx}\right)^{-1}\bmod {\frac {2w}{gx}}\)(通过 \(\text{exgcd}\) 求出),则
令 \(Rx=\frac{rx}{gx}\times ix\),\(p=\frac{2w}{gx}\),则转化为
同理对 \({dy}_n\times j+{dy}_i\equiv 0\pmod{2h}\) 进行类似的化简得到
令 \(j=Rx+p\times k_1\),\(j=Ry+p\times k_2\),则
令 \(d=\gcd(p,q)\),则该方程有解当且仅当 \(d\mid(Ry-Rx)\),方程转化为
求出其一组解 \((x_0,y_0)\),则
令 \(e=\operatorname{lcm}(p,q)\),\(bs=(Rx+px_0)\bmod e\),则 \(j=bs+e\times k\;(k\in\mathbb N)\),若 \(bs<k\) 则令答案累加 \(\lfloor\frac{k-bs-1}e\rfloor\)
时间复杂度 \(O(n\log V)\)

浙公网安备 33010602011771号