A | B | C | D | E | F | G | I | J | K |
---|---|---|---|---|---|---|---|---|---|
+ | + | + | + | + | + | + | + |
rank:5
题目在北交OJ上,补不了题了。。
inline void up(int x){ for(register int i = 0;i <= 1;i++){ for(register int j = 0;j <= 1;j++){ t[x].f[i][j] = (1ll * t[ls(x)].g[i][0] * t[rs(x)].g[0][j] % p * (t[ls(x)].f[i][0] + t[rs(x)].f[0][j]) % p + 1ll * t[ls(x)].g[i][1] * t[rs(x)].g[1][j] % p * (t[ls(x)].f[i][1] + t[rs(x)].f[1][j]) % p) % p; t[x].g[i][j] = (1ll * t[ls(x)].g[i][0] * t[rs(x)].g[0][j] % p + 1ll * t[ls(x)].g[i][1] * t[rs(x)].g[1][j] % p) % p; t[x].f[i][j] = 1ll * t[x].f[i][j] * fpow(t[x].g[i][j], p - 2) % p; } } }
特别需要注意,$f_{i,j}$代表的期望是在不考虑是否满足开头结尾对应的比赛是$i,j$状态下的期望,而我们在合并的过程中第一个式子是在上述条件下的期望,因此我们需要再除以这个概率才能得到正确的期望。这里卡了一万年,我太菜了。