Loading

近期总结 2023.10.28

Luogu4156 论战捆竹竿

题意:给出一个长度 \(n\) 的字符串 \(s\),有一个空字符串 \(t\)。每次可以把 \(s\) 接在 \(t\) 后面,相同部分可以重叠。求任意操作后 \(|t|\in[l,r]\) 有多少种可能。

\(1\le n\le 5\times 10^5,\space 1\le l\le r\le 10^{18}\)


不难发现,每次延长的长度都 \(\in \text{period}(s)\),而且,一定存在一张方案满足 \(s\) 的所有周期都能任意次延长。

考虑同于最短路,但是周期数量可能很多,不能很完美地处理。

结论:一个字符串的 \(\text{Border}\) 最多可以划分成 \(O(\log n)\) 个等差数列。

同样的,周期也可以。

考虑一个周期长度的等差数列 \(d,c+d,2c+d,3c+d,...,L\cdot c+d\)

有个 \(d\) 很烦,考虑在 \(\bmod d\) 意义下跑同于最短路,这样每次步长就是 \(c\),直接分环做单调队列即可。

但是不止一个等差数列,这要求我们变模数。考虑先用 \(dis'[i]\) 更新 \(dis[dis'[i]\bmod \text{newmod}]\),然后不断跳 \(\text{oldmod}\) 更新即可。

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


Luogu4707 重返现世

题意:\(n\) 种材料,你需要收集至少 \(k\) 种。每秒随机出现一种材料(可以和之前的重复),每种材料出现概率为 \(\frac m{p_i}\),其中 \(m=\sum\limits_{i=1}^np_i\)。问期望多少秒,模 \(998244353\)

\(1\le n\le 1000,\space 1\le m\le 10000,\space 1\le k\le n,\space n-k\le 10\)

考虑 \(\text{min-max}\) 容斥。

\(t_i\) 表示材料 \(i\) 第一次出现时间。

\(g=n-k+1\),那么相当于求 \(t\) 中第 \(g\) 大的期望值。

答案即为

\[E(\text{g-th max}(t_i))=\sum_{S\in U} (-1)^{|S|-g} {|S|-1 \choose g-1} E(\min_{i\in S} (t_i)) \]

我们相当于算后面那坨东西 \(\sum_{S\in U} (-1)^{|S|-g} {|S|-1 \choose g-1} E(\min_{i\in S} (t_i))\)

注意 \(E(\min_{i\in S} (t_i))\) 相当于第一次出现 \(S\) 中的材料的时间,那么在此之前出现的材料都不是 \(S\) 中的,不难算出其值为 \(\frac m{\sum_{i\in S}p_i}\)

\[\begin{aligned} \text{原式} &= \sum_{S\in U} (-1)^{|S|-g} {|S|-1 \choose g-1} E(\min (t_i)) \\ &= \sum_{S\in U} (-1)^{|S|-g} {|S|-1 \choose g-1} \frac m{\sum_{i\in S}p_i} \\ &= \sum_{x} \frac mx \sum_{S\in U, \sum_{i\in S}p_i=x} (-1)^{|S|-g} {|S|-1 \choose g-1} \end{aligned} \]

后面的式子具有良好的递推性质。

\(f[i,j,k]=\sum\limits_{S\in \{1,2,...,i\},\sum_{t\in S}p_t=j} (-1)^{|S|-k} {|S|-1 \choose k-1}\)

考虑 \(f[i,j,k]\)\(f[i+1,,]\) 的贡献。

  • 不选,\(f[i,j,k] \rightarrow f[i+1,j,k]\)

  • 选,\(f[i,j,k]\times(-1) \rightarrow f[i+1,j+p_{i+1},k+1],\space f[i,j,k]\rightarrow f[i+1,j+p_{i+1},k]\)

时间复杂度 \(O(nm)\)


AGC038E Gachapon


\(n\) 个数 \(1...n\),每次随机生成其中一个数,生成 \(i\) 的概率为 \(\frac m {p_i}\),其中 \(m=\sum p_i\)。当 \(\forall i\in [1,n]\)\(i\) 至少生成了 \(a_i\) 次后,停止生成。求生成的期望次数,模 \(998244353\)

\(p_i,a_i>1,\space 1\le \sum p_i,\sum a_i,n\le 400\)


\(t_i\)\(i\) 生成 \(a_i\) 次时的时间,答案:\(E(\max(t_i))\)

转化为 \(\sum\limits_S (-1)^{|S|+1}E(\min_{i\in S}(t_i))\)

考虑期望线性性,对于 \(S\),在生成数的过程中,设 \(b_i\)\(i\) 在生成中的出现次数,那么其对应的 \(b\) 集合 \(S_b\) 有许多不同的状态,根据 套路,考虑对于每个状态计算到达他的期望概率以及他停留的期望时间。合法的 \(S_b\) 状态一共 \(\prod\limits_{i\in S}a_i\) 种,但每种概率不同,是个多重集排列数。不难发现每种停留的概率都是 \(\frac m{\sum_{i\in S}p_i}\)

\(f[i,j,k]\) 表示选择了 \(\{1,2,...i\}\) 的一个集合 \(S\)\(\sum_{x\in S}p_x=j\),此时选择集合的 \(S_b\) 之和为 \(k\),方案数系数的总和。

那么

  • 不选 \(i+1\)\(f[i,j,k]\rightarrow f[i+1,j,k]\)

  • \(i+1\),枚举选了 \(c\) 个,注意算 \(S\) 中出现数的概率是条件概率,分母最后计算,\(f[i,j,k]\times (-1) \times{k+c \choose c}\times p_{i+1}^c\rightarrow f[i+1,j+p_{i+1},k+c]\)

时间复杂度 \(O(n\sum a\sum p)\)

posted @ 2023-10-28 08:24  Lgx_Q  阅读(10)  评论(0编辑  收藏  举报