1 条题解
-
1
乒乓球
1. 统一建模
记分差
初始 ,到达 表示 P 获胜,到达 表示 P 失败。
定义
表示当前分差为 ,下一回合使用 (为了表述方便, 下标改为 )发球时,最终 P 获胜概率。
令:
- 若 ,;
- 若 ,;
- 。
转移:
$$f(d,i)=a_i\,f(d+1,(i+1)\bmod m)+b_i\,f(d-1,(i+1)\bmod m) $$边界:
答案是 。
数据生成方式为随机是为了在计算过程中不会出现在模意义下存在多解。
2. 分 Subtask 对应做法
Subtask 1()
这一档部分分实际就是 。比赛一回合就会结束,答案就是首回合 P 赢球概率:
- 若 ,答案 ;
- 否则答案 。
复杂度:(认为计算逆元为常数复杂度)。
对应代码:
std/subtask1.cppSubtask 2()
把所有 的 作为未知数,直接列方程组(包含 个未知数以及 个包含未知数的等式),高斯消元。
复杂度:
对应代码:
std/subtask2.cppSubtask 3()
退化为一维随机游走。设每回合 P 赢概率 、输概率 ,则
配合边界可得
快速幂计算。
复杂度:。
对应代码:
std/subtask3.cppSubtask 4()
设
构成 4 维状态
得到常系数递推 ( 矩阵),矩阵快速幂求解。
复杂度:。
对应代码:
std/subtask4.cppSubtask 5()
把 设为 个主元,按层传播“线性系数向量”:已知第 层推出第 层。推到顶层后解一个 方程组,再回代求 。
复杂度:
对应代码:
std/subtask5.cppSubtask 6(满分)
把两层打包:
$$W_d=\begin{bmatrix}P_d\\P_{d-1}\end{bmatrix}\in\mathbb{F}^{2m} $$存在固定矩阵 使
故可用矩阵快速幂处理 :先由 上半部分全 1 解出底层未知向量,再算 ,第一项即答案。
复杂度:
对应代码:
std/subtask6.cpp
- 1
信息
- ID
- 4
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 40
- 已通过
- 1
- 上传者