fl,r,0 表示区间 [l,r] 内为理想队列且最后一个人由左边进入的方案数.
fl,r,1 表示区间 [l,r] 内为理想队列且最后一个人由右边进入的方案数.
令 fx,x,0=1,ai 表示原序列的第 i 个元素.
fl,r,0=[al<al+1]fl+1,r,0+[al<ar]fl+1,r,1
fl,r,1=[al<ar]fl,r−1,0+[ar−1<ar]fl,r−1,1
fu,v,k 表示图中存在一条 u→v 的路径,使得路径长为 2k.
转移考虑 floyd 传递闭包的过程,枚举断点 p,如果 fu,p,k−1 和 fp,v,k−1 均为真,则 fu,v,k 为真.
每次转移成功都在图中连一条 u→v 的边,最后在图上求 1→n 的最短路即可.
注意到题目中给的递推式均为常系数齐次线性递推,考虑矩阵快速幂.
记第 1 个递推式对应的转移矩阵为 A,第 2 个递推式对应的转移矩阵为 B,初始矩阵为 S.
容易得到:
S=(11),A=(ab01),B=(cd01)
最后答案矩阵 T 由下式计算:
T=S(Am−1B)n−1Am−1
T1,1 即为答案.
注意到 n,m 较大,我们有费马小定理:
xp−1≡1 (mod p)
在本题中 p=109+7.
读入时将 n,m 模 p−1 即可.
注意对于转移矩阵,当 a=1 或 c=1 时,费马小定理不适用,应对指数模 p.
钦定根为 1.
令 Vx 表示编号为 x 的节点的点权,Cu 表示 u 的儿子所构成的集合,Fu 表示节点 u 的父亲.
设 fu,k 表示在以 u 为根的子树中深度不超过 k 的节点权值和,gu,k 表示在树中与 u 的距离不超过 k 的节点权值和.
容易得出 f 的转移:
fu,k=Vu+v∈Cu∑fv,k−1
考虑 g 的转移.对于 1 个点 u,gu,k 由 2 部分组成:
- 以 u 为根的子树内深度不超过 k 的节点权值和.
- 在 u 上方且与 u 的距离不超过 k 的节点权值和.
我们可以得出 gu,k 的转移:
gu,k=fu,k+gFu,k−1−fu,k−2
其中 fu,k 为第 1 部分,gFu,k−1−fu,k−2 为第 2 部分.
约定 W 为第 1 种字符,I 为第 2 种字符,N 为第 3 种字符,G 为第 4 种字符.
令 ci,j,k 表示第 i 种字符可以转变成的串的第 k 个字符,其中 i∈[1,4],k∈[1,2].
设 fl,r,x 表示目标串在 l∼r 内能够由单个第 x 种字符转化而成.
转移时枚举转移断点 k,字符种类 i,要替换的字符串 j.转移如下:
fl,r,i=fl,k,ri,j,0∧fk+1,r,ri,j,1
令 i 号卡牌上的数字为 ci,卡牌数目为 m.
设 fi,j 表示有 i 人参加游戏,且 j 号玩家胜出的概率.显然有 f1,1=1.
考虑转移,i 人参加游戏的状态可由 i−1 人参加游戏的状态转移而来.
记 i 人参加游戏时的 j 号玩家在 i−1 人参加游戏且该轮游戏中庄家抽出的卡牌编号为 k 时的编号为 xi,j,k.
xi,j,k=j−ckmodi
要注意的是,当 j=ckmodi 时,j 号玩家被淘汰,此时不应进行转移.
综上,我们有转移:
fi,j=m1k=1∑m[j=ckmodi]fi−1,xi,j,k
当然,我们可以令 fx,0=0,转移可简化为:
fi,j=m1k=1∑mfi−1,xi,j,k
每次对整棵树进行查询,考虑使用并查集进行维护.
考虑修改操作,每次修改将 v 接到 u 下.u 作为新树的根,填入数字时只能填 0.
令 su 代表以 u 为根的树的大小,修改时 su 直接加上 sv 即可.
设 au 为以 u 为根的树中的填数方案数.修改后 v 的子树内共有 sv 个节点,可以填入 su−1 个数字,方案数为 (svsu−1).根据乘法原理,每次修改时我们有:
au=au×av×(svsu−1)