做题记录 25.10.19

· · 个人记录

\textcolor{blue}\odot P14154 [ICPC 2022 Nanjing R] 索道 \quad QOJ #5415. Ropeway

f_i 表示 [0,i] 中强制选择 i 的情况下的答案,g_i 表示 [i,n+1] 中强制选择 i 的情况下的答案,两者容易单调队列 O(n) 求出

对于修改 (p,v),若 p 必选则答案为 f_{n+1}-a_p+v,否则令 pr_p,sf_pp 前一个与后一个必选位置,答案为 \min(\min f_{\max(pr_p,p-k)\sim p-1}+v+\min g_{p+1\sim \min(sf_p,p+k)},\min_{\max(pr_p,p-k)\le x\le p-1}\min_{p+1\le y\le \min(sf_p,p+k),y-x\le k}(f_x+g_y)),容易做到 O(k)

总时间复杂度 O(n+qk)

代码:luogu \quad QOJ

参考

\purple\odot P11802 【MX-X9-T6】『GROI-R3』Graph

先考虑如何判定给定的 \{P\} 是否合法

定理:一个长度为 p 的置换的 c 次方得到 \gcd(p,c) 个长度为 \frac n{\gcd(p,c)} 的环

对于环长 i,考虑什么样的数量 j 使得存在 l\frac l{\gcd(l,c)}=i\gcd(l,c)\mid j,即当长度为 i 的环数量为 j 时,在 c 次变换下,它们可以拼为若干更大的环

定理:j 合法当且仅当 p\mid j,其中 p 为满足 \frac l{\gcd(l,c)}=i\gcd(l,c) 的最小值,即满足 p=\gcd(p\cdot i,c) 的最小值

证明:

预处理 p_i,表示对于确定的 i,合法的 p 的最小值,这部分时间复杂度为 O(nc\log n)

\{P\} 中长度为 i 的环的数量为 r_i,则要求每个 r_i 都能表示为若干 p_l 的倍数之和,其中 li 的倍数,显然等价于 r_ip_i 的倍数

因此 \{P\} 合法当且仅当 \forall i,p_i\mid r_i

然后考虑题目给定的不完整排列

求出 l_i,r_i,m 表示长度为 i 的链数,长度为 i 的环数,孤点数

需要将 l_im 组合为若干环,使得最终的 r_ip_i 的倍数,显然根据题目的限制,一个环只能由一条链加若干孤点,或完全由孤点组成,令最终的 rr^\ast

f_{i,j,k} 表示确定了 r^\ast_{1\sim i},目前有 j 条长度为 i 的链(可能由之前若干链和孤点拼接),剩余 k 个孤点的方案数

初始 f_{0,0,m}\gets 1,答案为 f_{n,0,0},考虑转移

f_{i-1,j,k}f_{i,\ast,\ast},转移分为两步

先将 j 条长度为 i-1 的链增长至 i,并加入长度为 il_i 条链,转移为 g_{j+l_i,k-j}\gets f_{i-1,j,k}\cdot P_k^j(加入的点接在链末尾,因为是环,不用考虑接在头部的情况)

然后将这 i 条链和若干孤点组合为长度为 i 的环,枚举链组成 J 个环,孤点组成 K 个环,转移为

f_{i,j-J,k-Ki}\gets [J+K+r_i\equiv 0\pmod {p_i}]\binom jJ\cdot \frac{A_k^{Ki}}{i^KK!}\cdot g_{j,k}

其中 \frac{A_k^{Ki}}{i^KK!}Ki 个点组成 K 个长度为 i 的环的方案数,i^K 为每个环循环同构的系数,K! 为环之间顺序的系数

暴力实现复杂度为 O(\sum_{i=1}^n \frac mi \cdot \frac ni\cdot \frac ni\cdot m)=O(n^4\sum_{i=1}^n \frac 1{i^3})=O(n^4)

考虑优化最后的转移

枚举 x\in [0,p_i),考虑所有 J\equiv x\pmod{p_i} 的转移

h_{j-J,k}\gets g_{i,k}\binom jJ,则

f_{j,k-Ki}\gets h_{j,k}\cdot \frac{A_{k}^{Ki}}{i^KK!}

时间复杂度 O(n^3),常数极小,可过

代码

参考:1 \quad 2

\blue\odot P14015 [ICPC 2024 Nanjing R] 生日礼物

若不存在 2,令奇数位异或上 1,则每次操作删除相邻的 01,答案为 01 的数量之差,尽量用 2 抵消掉两者之差即可,时间复杂度 O(\sum |s_i|)

代码

\blue\odot P13968 [VKOSHP 2024] Classics

通过平衡树求出每个数在最终序列中的位置

f_i 表示目前为止 [1,i]\text{LIS},加入位置 p 时令 f_p\gets \max f_{1\sim p-1}+1

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

代码

参考