LR 8 Hello 戊戌 - 抢红包 题解

首先声明题面中加入 Moejy0viiiiiv 与本人无关。

由于本题的数据范围在样例造好之后又进行了更改,所以初始时题面中出现了与数据范围不符的样例,如果对您的做题产生影响,我深表歉意。

算法一

\(P(x,\ y)\) 为走到 \((x,\ y)\) 的概率,则所求即为 \(\sum_{x,\ y}\ P(xD,\ yD)\)

由于 \(N\ \leq\ 10000\),所以直接按照 \(P(x,\ y)\ =\ P(x,\ y\ -\ 1)\ *\ A\ +\ P(x\ -\ 1,\ y)\ *\ B\) 转移即可。

时间复杂度 \(O(N^2)\)

空间复杂度 \(O(N^2)\),可以使用滚动数组 \(O(N)\)

可以通过第一个子任务,预计得分 \(9\) 分。

算法二

我们设 \(F_z(x)\ =\ \sum_{i\ =\ 0}^z\ P(i,\ z\ -\ i)\ *\ x^i\ mod\ (x^D\ -\ 1)\),那么有 \(F_z(x)\ =\ F_{z\ -\ 1}(x)\ *\ (Bx\ +\ A)\)。所求即为 \([x^0]\ \sum_{i}\ [iD\ \leq\ N]\ F_{iD}(x)\)。我们可以直接通过枚举 \(i\) 来计算。

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

空间复杂度 \(O(D)\)

可以通过第二个子任务,结合算法一预计得分 \(21\) 分。

算法三

\(F\) 求和可以考虑通过倍增的思想进行。

我们另 \(H(x)\ =\ (Bx\ +\ A)^D\ mod\ (x^D\ -\ 1)\)\(SH_n(x)\ =\ \sum_{i\ =\ 1}^n\ H(x)\)

有转移

  • \(SH_{n\ +\ 1}(x)\ =\ SH_n(x)\cdot H(x)\ +\ H(x)\)

  • \(SH_{2n}(x)\ =\ SH_n(x)\cdot H(x)^n\ +\ SH_n(x)\)

时间复杂度 \(O(D^2 log N)\)

空间复杂度 \(O(D)\)

可以通过子任务二、三,结合算法一预计得分 \(48\) 分。

算法四

现在考虑有坑的情况。
在计算 \([x^0]\ \sum_{i}\ F_{iD}(x)\) 时,我们可以对一段连续的不包含坑的 \(x\ +\ y\) 的值的区间 \([l,\ r]\) 计算贡献。
如果我们能快速求出 \(F_l(x)\) ,那么就能将问题转化为无坑的情况了。

我们设 \(G_z(x)\ =\ \sum_{i\ =\ 0}^z\ P(i,\ z\ -\ i)\ *\ x^i\)
如果能得到 \(G_l(x)\),就可以通过在原 \(F_l(x)\) 的对应位置上减去相应的值得到有坑情况下的 \(F_l(x)\)
可以发现 \(G\) 的转移与 \(F\) 相同。
又由于所有坑 \(x\ \leq\ M\),所以只用维护 \(G(x)\ mod\ x^M\)

如果使用算法二的计算方法,时间复杂度 \(O((D\ +\ M)N)\)

空间复杂度 \(O(D\ +\ M)\)

可以通过子任务二、四,结合算法一、三预计得分 \(56\) 分。

算法五

在算法三、四的基础上考虑如何快速计算 \(G_z(x)\)

可以发现对于无坑区间 \([l,\ r]\)\(G_r(x)\ =\ G_l(x)\cdot (Bx\ +\ A)^{r\ -\ l}\ mod\ x^M\)\([x^i](Bx\ +\ A)^m\ =\ \binom{m}{i}\ B^i\ A^{m\ -\ i}\)
可以通过一次多项式乘法进行转移。

时间复杂度 \(O(K(D\ log\ D\ +\ M\ log^2\ M)\ log\ N)\)

空间复杂度 \(O(D\ +\ M)\)

预计得分 \(100\) 分。

posted @ 2018-02-23 09:57  King_George  阅读(530)  评论(0编辑  收藏  举报