• 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) 分。

  • 相关阅读:
    Windows 7任务栏图标特别说明
    Linux下send函数 Broken pipe错误的解决方法
    C++实现一个简单的异常日志记录类
    C++写日志操作
    VC中设置打开文件的权限为管理员权限
    MFC 注册热键
    监控Tomcat状态及配置AIO(APR)模式
    Tomcat管理功能使用及WEB站点部署
    Tomcat多实例配置
    基于端口主机的虚拟主机
  • 原文地址:https://www.cnblogs.com/King-George/p/8460926.html
Copyright © 2020-2023  润新知