Atcoder abc299
https://atcoder.jp/contests/abc299/tasks
Ex - Dice Sum Infinity
6面骰子(1…6), 正整数R
每次投骰子, X=历史所有骰子的和, 如果 X-R是 1e9的倍数, 操作退出
求 退出时, Exp(次数C), mod 998244353
R [1,1e9)
2s
1024mb
我的思路
p(t,k)=
t次 和=1e9 k + R, 且 < k的时刻没有达到等于
$\displaystyle ans = \sum_{t=1}^{\infty} \sum_{k\in [\frac{t-R}{10^9},\frac{6t-R}{10^9}]} p(t,k)t$
或者能否 p[s] = 和达到s的概率
这样看起来似乎可以矩阵转移,快速幂 合并?
题解
Ei = 初始为$R-X\equiv i\pmod{10^9}$ 到结束需要的期望次数
直到$X-R\ge k10^9$ 总是会经过$k10^9 - i, i\in[1,6]$ 中的一个状态
所以这根据依赖关系其实是解6个$E_i,i\in[1,6]$
子问题
给整数r, 每次r-骰子, 如果 r<=0 则终止
找 e(r)=次数
和p_{i=0,-1,-2,-3,-4,-5} 的概率
有 线性recurrence relation
对于给定r可以O(log r), 如果骰子d面,则$O(d^2 \log d \log r)$时间复杂度
然后可以预计算出Ei
$\displaystyle ans= e(R-6)+\sum _ {i=1} ^ 6E _ ip _ {i-6}(R-6)$
这里 例如 E3 => 那么它的可能是 走到R 停止, 或者不经过R走到下一处的E1~E6, 所以显然这是可以建立的
例如 E1对 E3的贡献就是, E3不经过R走到非E(为了不重复), 然后一步走到E1, 然后贡献为 (概率 * (E3) + exp 这一段的次数期望
所以核心变成实现 移动距离l的 期望和期望次数
代码
https://atcoder.jp/contests/abc299/submissions/42075457
1 |
|
总结
Ex
这个题意我就读错了…
后面读懂后,有想到 矩阵快速幂次,但是这里很显然的 就可以建立 矩阵去求解,竟然没想到
后续就是实现了
然后这个里 (p1,e1) * (p2,e2) = (p1p2,p1e2+p2e1) 感觉需要悟一悟, 第一次见
除了这个 p,e处理,其它的从道理上讲应该都要能想到,只想到了一部分,还是不应该