下次再见 题解

· · 个人记录

计算 ans 等于每个起始位置期望的和.最后除以 n

brute

枚举起点.

由期望的线性性,可以计算每个位置的贡献.设 E_i 表示 i 位置点击时的期望得分.那么有

E_i=3P_{i,0}+P_{i,1}+0.5P_{i,2}

考虑设 F_{i,j(j<K)} 表示之前不存在 K 次连续 miss,从起点到 i 位置,i 位置向后连续的 miss 次数为 j 的方案数.令 F_{i,K} 表示在 i 之前死掉的概率.有转移

\begin{aligned} &F_{i,j}\times P_{miss}(i+1)\rightarrow F_{i+1,j+1} &(j<K)\\ &F_{i,j}\times (1-P_{miss}(i+1))\rightarrow F_{i+1, 0} &(j<K)\\ &F_{i,K}\rightarrow F_{i+1,K} \end{aligned}

对于计算答案有

ans=\sum_{i=0}^{n-1}(1-F_{i,K})E_{i+1}

时间复杂度为 O(n^2K)

特殊性质 A

## 特殊性质 $B

由于 p_{i,3} 只有 0100 两种取值,那么从任意一个位置 i 开始可以游玩的区间是固定的.即从 i 开始到第一个 p_{j,3}100 的位置之前结束.我们预处理每个位置得分期望的前缀和既可以快速计算答案.

100\%

brute 同样拆分贡献.先考虑固定起点位 1

F_i 表示刚好在 i 处死掉的概率,G_i 表示在 i 处还没死的概率,P_i 表示在 i 处 miss 的概率.有

\begin{aligned} &F_i=(\prod_{i-K+1\le j\le i}P_j)(1-P_{i-K})G_{i-K-1}\\ &G_i=1-\sum_{j\le i} F_j \end{aligned}

那么起点为 1 的答案就是

\sum_{i=0}^{n-1} G_iE_{i+1}

考虑多起点.我们将 F,G 拓展为 F_{sta,i},G_{sta, i}.设 H_i=\sum_{sta\le i}G_{sta,i}

同样是拆分贡献.我们枚举每个造成贡献的位置,然后枚举起点,那么有

ans=\sum_{i=0}^{n-1}(H_i+1)E_{i+1} \begin{aligned} H_i&=\sum_{sta\le i}G_{sta,i}\\ &=\sum_{sta\le i}(1-\sum_{sta\le j\le i}F_{sta,j})\\ &=i-\sum_{sta\le i}\sum_{sta\le j\le i}F_{sta,j}\\ &=i-\sum_{j\le i}\sum_{sta\le j}F_{sta,j} \end{aligned}

那么问题变为了对于每一个 i\sum_{sta\le i}F_{sta,i}

分类讨论:

F_{sta,i}= \begin{cases} &0 &(sta> i-K+1)\\ &\prod_{i-K+1\le j\le i}P_j &(sta=i-K+1)\\ &(\prod_{i-K+1\le j\le i}P_j)(1-P_{i-K}) &(sta=i-K)\\ &(\prod_{i-K+1\le j\le i}P_j)(1-P_{i-K})G_{sta} &(sta<i-K) \end{cases}

前三类直接算,第四类发现把前面的系数 (\prod_{i-K+1\le j\le i}P_j)(1-P_{i-K}) 提出来后,后面的东西全部加起来是 H_{i-K-1}

复杂度为 O(n\log w).瓶颈在计算逆元.

发现前缀积每一位置上的逆元可以预处理:1/(\prod p_{i,3})=\prod(1/p_{i,3}),而本质不同的 p_{i,3} 不超过 100 种.

总时间复杂度降为 O(n)