2025.3.18 NOI 模拟赛 题解
T1 考试 P11918 [PA 2025] 考试 / Egzamin
题意
\(n\) 个元素 \(1\sim n\),从中选出一个子集,有一个权值初始为 \(0\),第 \(i\) 个元素以 \(p_i\) 的概率令权值加一,\(1-p_i\) 的概率令权值减一,求权值 \(\ge k\) 的概率的最大值(浮点数),\(k\le n\le2\times10^5\)
分析
将元素按 \(p\) 从大到小排序,则最优情况下选择的一定为一个前缀
设选择了 \(p_{1\sim t}\)(排序后的 \(p\)),则权值 \(\ge k\) 等价于加一的元素数量 \(\ge\lceil\frac{k+t}2\rceil\),概率为
从 \(1\) 到 \(n\) 枚举 \(t\),保存多项式 \(\prod_{i=1}^x (p_i x+1-p_i)\),每次暴力乘上一个 \((p_ix+1-p_i)\) 并计算系数和可以做到 \(O(n^2)\)
设最大误差为 \(\varepsilon\),则对于该多项式中前后缀 \(\le \frac{\varepsilon}n\) 的系数都可以忽略
因此在计算多项式时,维护指针 \(L,R\) 表示值 \(>\frac{\varepsilon}n\) 的范围(实测取 \(>10^{-18}\) 可过)
时间复杂度未知
存在确定性(忽略浮点误差可精确计算出答案)的 \(O(n\log^2 n)\) 算法
对 \(t=1\sim n\) 的情况分治,设当前处理到区间 \([l,r]\),\([1,l)\) 的多项式为 \(P\)
对于指数 \(<\frac{k+r}2-(r-l+1)-O(1)\) 的项,不会对 \([l,r]\) 内的答案产生贡献,可以忽略
对于指数 \(>\frac{k+r}2+(r-l+1)+O(1)\) 的项,对 \([l,r]\) 内的答案必然产生贡献,可直接计入答案后忽略
这样只需要考虑一个长为 \(O(r-l+1)\) 的区间
使用多项式相关算法,可以做到 \(O(n\log^2 n)\)
T2 子序列 P11928 [PA 2025] 子序列 / Podciągi
题意
长为 \(n\) 的字符串 \(s\) 由前 \(m\) 个小写字母组成,\(q\) 次单点修改,所有修改前和每次修改后,求出字符串中至少出现两次的子序列数量,\(n\le2\times10^5,m\le6,q\le5\times10^4\)
分析
至少出现两次的数量等于 \(s\) 本质不同的子序列数量减去只出现一次的数量
先考虑计算 \(s\) 本质不同的子序列数量(可空)
令 \(dp_i\) 表示 \(s_{1\sim i}\) 中本质不同的子序列数量,令 \(pre_{i,j}\) 表示 \(s_{1\sim i-1}\) 中最后一个和 \(j\) 相同的位置(\(j\) 取值为前 \(m\) 个字母),不存在则为 \(0\),则转移为
假定 \(dp_{-1}=0\),边界为 \(dp_0=1\)
计算时保存向量 \(\begin{bmatrix}dp_{i-1}\\dp_{pre_{i,\text {'a'}}-1}\\dp_{pre_{i,\text {'b'}}-1}\\\vdots\end{bmatrix}\),则转移可用矩阵描述
线段树维护矩阵,总时间复杂度 \(O((n+q\log n)m^3)\)
然后考虑计算只出现一次的子序列数量(可空)
令 \(prv_{i,j}\) 表示 \(s_{1\sim i-1}\) 中最后一个与 \(j\) 相同的位置,即 \(pre_{i-1,j}\)
令 \(dp_{i,j}\) 表示 \(s_{1\sim i}\) 中以字符 \(j\) 结尾的本质不同子串数量,则 \(dp_{0,\ast}=0\),转移为
向量为 \(\begin{bmatrix}dp_{i,\text{'a'}}\\dp_{i,\text{'b'}}\\ \vdots\\1\end{bmatrix}\),转移同样用矩阵描述,注意单点修改时还要跟新后继字符的矩阵
时间复杂度 \(O((n+mq\log n)m^3)\)
总时间复杂度 \(O((n+mq\log n)m^3)\),存在 \(O((n+q\log n)m^3)\) 的算法

浙公网安备 33010602011771号