1 条题解
-
0
题解
思路推导
一条最短路径只会向下或向右。若它经过了 个异常格,终点电量只由 决定,记为
关键困难是只给出至多两千个异常格,不能在整个网格上做动态规划。
对于两个格子 、,若 且 ,从 到 的最短路径数为
否则为零。阶乘和逆阶乘可以在 时间内预处理。
把每个异常格看成一个权值为形式变量 的格子,则所有路径的生成函数中, 的系数就是恰经过 个异常格的路径数。使用恒等式 ,可以按“被选中的异常格链”展开生成函数。
设 表示从起点到异常格 、但尚未给 乘上 时的路径生成函数。按坐标排序后有
其中不可达的 自动贡献零。终点的生成函数同理为
做法
直接保存完整多项式需要三次方复杂度。注意 ,令 为满足 的最小整数,则 ,并且对所有 都有 。
因此只需保存多项式的 次至 次系数,以及所有次数不小于 的系数之和。若当前压缩向量为
乘以 后的新向量为
最后一项来自高次系数的望远镜求和,所以压缩表示在乘以 后仍然封闭。
依次计算每个 的压缩向量,再用同样的转移得到终点分布。答案分子为
最后除以总路径数 。
正确性证明
对任意固定路径,设它经过的异常格集合为 。在所有异常格链的展开中,从该路径上的异常格选出任意子集都会贡献一次,对应权值 。这些贡献之和为
$$\sum_{T\subseteq S}(x-1)^{|T|}=(1+x-1)^{|S|}=x^{|S|}.$$因此递推得到的 的 次系数恰是经过 个异常格的最短路径数。
当 时,,这些次数只需知道系数总和。乘以 后,高次系数之和等于原来的 ,故压缩转移没有丢失求期望所需的信息。最终按各次数的路径数乘对应电量并除以总路径数,得到的正是所求期望。
部分分算法
当 且 时,可以深度优先枚举所有向下或向右的最短路径,逐条模拟电量变化。
当 时,可以保存次数 到 的完整路径生成多项式。每对异常格的转移需要遍历全部次数,总复杂度为 。
复杂度分析
满分算法对每对异常格执行 次运算,其中 。时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1482
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者