Atcoder abc271
https://atcoder.jp/contests/abc271/tasks
G - Access Counter
给定 长24的C
如果 Ci==T, 甲 X % 可能访问
如果 Ci==A, 乙 Y % 可能访问
超过的C看作循环
好的状态 = 甲不是第N次方案的
求好的状态的 概率 mod 998244353
范围
n 1e18
x,y [1,99]
|c| == 24
2s
1024mb
我的思路
先最无脑的
dp[i][j] =
第i个被访问, 且是第j次 的概率
dp[i][j] = dp[k < i][j-1] * prod p[k+1..i-1] 不被访问 p[i]
ans = sum dp[i是乙][n]
然而是个无限的求和
要干掉无限
那么换个角度
dp[j][idx]
第j次访问, 位置在C[idx] 的概率
dp[j][idx] = dp[j-1][i=0..23] * p[i->idx] 从i开始下一次访问idx, 中间不访问其它的概率
这里把dp[j]
看成一个向量, p与j无关的常系数矩阵, 不就是矩阵快速幂了!
所以如何算p[pos0 -> pos1]
直接走到 = prod(1-p[pos0+1..pos1-1]) * p[pos1]
绕一圈走到 = prod(1-p[pos0+1..pos1-1]) * prod(1-p[...]) * p[pos1]
绕两圈走到 = prod(1-p[pos0+1..pos1-1]) * prod(1-p[...])^2 * p[pos1]
综上 = prod(1-p[pos0+1..pos1-1]) * p[pos1] * 1/(1-prod(1-p[...]))
问题来了, 如果分母为0 怎么办?