做题记录 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\) 时刻相对于原点的偏移量,则答案为

\[\sum_{i=1}^n \sum_{j=0}^{k-1}[{dx}_n\times j+{dx}_i\equiv 0\pmod {2w}][{dy}_n\times j+{dy}_i\equiv 0\pmod{2h}] \]

\(rx=(-dx_i)\bmod 2w\),则

\[{dx}_n\times j+{dx}_i\equiv 0\pmod {2w}\iff dx_n\times j\equiv rx\pmod{2w} \]

\(gx=\gcd(2w,dx_n)\),则该方程有解当且仅当 \(gx\mid rx\)

\(ix=\left(\frac{dx_n}{gx}\right)^{-1}\bmod {\frac {2w}{gx}}\)(通过 \(\text{exgcd}\) 求出),则

\[dx_n\times j\equiv rx\pmod{2w}\iff j\equiv \frac{rx}{gx}\times ix\pmod{\frac{2w}{gx}} \]

\(Rx=\frac{rx}{gx}\times ix\)\(p=\frac{2w}{gx}\),则转化为

\[j\equiv Rx\pmod p \]

同理对 \({dy}_n\times j+{dy}_i\equiv 0\pmod{2h}\) 进行类似的化简得到

\[j\equiv Ry\pmod q \]

\(j=Rx+p\times k_1\)\(j=Ry+p\times k_2\),则

\[p\times k_1-q\times k_2=Ry-Rx \]

\(d=\gcd(p,q)\),则该方程有解当且仅当 \(d\mid(Ry-Rx)\),方程转化为

\[\frac pd\times k_1+\frac qd\times k_2=\frac{Ry-Rx}d \]

求出其一组解 \((x_0,y_0)\),则

\[j=Rx+p\left(x_0+k\times\frac qd\right)=Rx+px_0+k\times\operatorname{lcm}(p,q)\;(k\in \mathbb Z) \]

\(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)\)

代码

参考

posted @ 2025-03-18 09:54  Hstry  阅读(9)  评论(0)    收藏  举报