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\),概率为

\[\sum_{u\ge \lceil\frac{k+t}2\rceil}[x^u]\prod_{i=1}^x (p_i x+1-p_i) \]

\(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_i=2dp_{i-1}-dp_{pre_{i,s_i}-1} \]

假定 \(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\),转移为

\[dp_{i,j}\gets dp_{i-1,j}\\ dp_{i,s_i}\gets [prv_{i,s_i}=0]+\sum_{c\in \sum} [prv_{i,c}\ge prv_{i,s_i}] dp_{i-1,c} \]

向量为 \(\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)\) 的算法

代码

T3 海盗分金 P11924 [PA 2025] 贪婪大盗 / Piracka Chciwość

posted @ 2025-03-22 21:52  Hstry  阅读(64)  评论(0)    收藏  举报