zoukankan      html  css  js  c++  java
  • 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 = inom{m}{i} B^i A^{m - i})
    可以通过一次多项式乘法进行转移。

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

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

    预计得分 (100) 分。

  • 相关阅读:
    我的书单
    说说IUnitOfWork~Linq to Sql与EntityFrameworks中的SubmtChanges()发生了什么事
    说说IUnitOfWork~认识IUnitOfWork,为什么要出现IUnitOfWork接口
    LINQtoSQL那点事~关于延时加载的性能,微软给出了不错的解决方案
    数据结构~站点地图其实是一颗树
    说说IUnitOfWork~方法完整性与统一提交不冲突
    递归 解剖
    Java Socket一对一聊天
    转:浅谈c++容器
    Java JList 使用
  • 原文地址:https://www.cnblogs.com/King-George/p/8460926.html
Copyright © 2011-2022 走看看