做题记录 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_p\)\(p\) 前一个与后一个必选位置,答案为 \(\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

参考

\(\textcolor{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\)\(p=\gcd(p\cdot i,c)\iff p\mid c\land \gcd(i,\frac cp)=1\)
  • \(p\) 分解为 \(\prod {Pr_i}^{\alpha_i}\),其中 \(Pr_i\) 为第 \(i\) 个质数,设 \(i\) 分解为 \(\beta\)\(c\) 分解为 \(\gamma\)
  • 则上述条件等价于 \(\forall i\),有 \(\alpha_i\le \gamma_i\)\(\min(\beta_i,\gamma_i-\alpha_i)=0\)
  • \(\beta_i=0\)\(\alpha_i\le \gamma_i\),否则 \(\alpha_i=\gamma_i\)
  • 假如 \(q\) 也合法,其分解为 \(\alpha'\),取 \(r=\gcd(p,q)\),其分解为 \(\alpha^\ast_i=\min(\alpha_i,\alpha'_i)\),显然同样满足条件
  • 因此对于合法的 \(p,q\)\(\gcd(p,q)\) 一定合法
  • 由此易证原命题成立

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

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

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

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

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

需要将 \(l_i\)\(m\) 组合为若干环,使得最终的 \(r_i\)\(p_i\) 的倍数,显然根据题目的限制,一个环只能由一条链加若干孤点,或完全由孤点组成,令最终的 \(r\)\(r^\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\),并加入长度为 \(i\)\(l_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

\(\textcolor{blue}\odot\) P14015 [ICPC 2024 Nanjing R] 生日礼物

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

代码

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

代码

参考

posted @ 2025-10-20 07:10  Hstry  阅读(2)  评论(0)    收藏  举报