2021牛客4

B

$[1,n]$​ 的数,每个数以 $p_i$​​ 概率生成。

重复下列操作

  1. 产生一个随机数。

  2. if 随机数大于等于之前所有数,$goto \space 1$, else $goto \space 3$

  3. 如果产生了 $x$​ 个数,获得 $x^2$​ 的分数,停下。

求期望分数。

$Solution$​​​​:常用套路,因为要求平方。

而 $E((X+1)^2)=E(X)^2+2*E(X)+1$​​​ ,其递增不线性,故要分别维护一次项和平方项的期望。

设 $f_i$ 表示当前取得的最大数是 $i$​​ ,还能进行的操作轮数的期望。

设 $g_i$​ 表示当前取得的最大数是 $i$​​ ,还能进行的操作轮数的期望的平方。

转移就是枚举所有的后继,相应的概率乘上能带来的收益即可。

$$ f_i =\sum_{j = i}^{n} p_j (f_j+1)+\sum_{j = 1}^{i-1}p_j 1 $$

$$ g_i =\sum_{j = i}^{n} p_j (g_j+2 f_j+1)+\sum_{j = 1}^{i-1}p_j * 1 ^2 $$

整理一下可以分离一下 $f_i$​ , $g_i$ 系数可以得到 $$ f_i =\frac{1+\sum_{j = i+1}^{n}p_j*f_j}{1-p_i} $$

$$g_i=\frac{ 1 + 2 * p_i * f_i + \sum_{j=i+1}^{n}p_j*(g_j+2*f_j)}{1-p_i}$$

这样就可以倒推得到所有的 $f$​ ,$g$​​ 。

注意求出的是还能进行的操作轮数的期望,那么实际答案还需加上取到这个数的一次,故对每个 $i$​ 的答案是 $g_i+2*f_i+1$​​,乘上对应的概率就可以得到答案。

发现 $O(n)$ 维护后缀和即可做完。

E

题意: $n$ 个结点的树,每个点权介于一定范围 $[l_i,r_i]$ ,边权是点权的异或值,给定边权,求有多少种可能的点权序列。

分析:

发现已知一个点的值 $a$​ ,比如说 $w_1=a$,那么你可以唯一确定得到所有 $w_ i$​ 的值。

于是题目就变成了,求 $n$ 个等式限制下 $a$ 的取值个数。

$l_i \leq w_i \oplus a \leq r_i$​​

这 $n$ 个等式下的所有区间交长度就是我们的答案,即满足所有限制条件的 $a$ 。

考虑将所有值域放在线段树上,求 $a$ 的合法取值的区间个数。

这个可以类似之前几天题目来做,在动态开点的线段树上依次判断区间。

比如对于一个式子 $w_i \oplus a \leq r_i$​​​,最多能确定线段树上递归 $30$​​​ 次,并能判断一些不合法的 $a$​ 的取值区间,线段树和字典树差不多。

最后递归求线段树上依然合法的区间即可。

G

给 $n$ ,$k$ ,$D$​​​,求所有满足

  1. $\forall i \in[1,n],a_i \geq 0$
  2. $\sum _{i=1}^n a_i=D$

的 $a_i$​序列的 $\frac{D!} {\prod_{i=1}^n (a_i+k)!} $​​。

$(n,k \leq 50,D\leq 10^8)$

考虑构造

$f(x)=\frac{1}{k!}x^0+\frac{1}{(k+1)!}x^1+\frac{1}{(k+2)!}x^2+…$

显然题目就是要求 $(f(x))^n$ 的 $x^D$ 次项系数,再乘上 $fac(D)$ 即可。

$D$ 值域较大,但只需要一个,可以分段打表。

发现 $f(x)*x^k = e^x - (1+\frac{1}{1!}x^1+ … \frac{1}{(k-1)!} x^{k-1} )$。

设 $g(x)=1+\frac{1}{1!}x^1+ … \frac{1}{(k-1)!} x^{k-1}$

$(f(x))^n= (\frac{e^x-g(x)}{x^k})^n$

显然只需求分子的 $D+k*n$ 项系数。

$(e^x-g(x))^n=\sum _{i=0}^n (-1)^i C_n^i (e^x)^{n-i}* g(x)^i$

对每个 $i$ ,枚举 $g(x)$ 的 $x$ ,容易算得对应的系数。

复杂度大概每次乘一个 $k$ 次多项式,最高指数到 $k*n$ 。

估摸着复杂度上界在 $O(n^2k+n^2k*log_2(kn))$。


感觉非常的有实力。

Licensed under CC BY-NC-SA 4.0
最后更新于 Apr 21, 2024 14:32 UTC
Built with Hugo
主题 StackJimmy 设计