变成计数序列数量,然后除以总方案则可以得到概率。
先考虑 $k=0$ 怎么做。
观察到如果 $a$ 中的最大值和 $b$ 中的最大值不相等,那么拥有更大的最大值的就可以获胜。否则就比较他们最大值的数量,如果最大值的数量不同,则拥有更多的最大值的就可以获胜。如果两者最大值数量相同,则找到 $a$ 中最后一个最大值的位置 $x$,$b$ 中最后一个最大值的位置 $y$,那么我们最后肯定是 $x$ 和 $y$ 一起上,然后一起下,这时候我们就变成了一个新的子问题,$a$ 中只保留 $[x+1,n]$,$b$ 中只保留 $[y+1,n]$。不断递归下去,直到决出胜者或者两个序列一起清空变成平局。
这个过程让我们想到了后缀非严格最大值序列,我们求出 $a$ 和 $b$ 的后缀非严格最大值序列 $f(a),f(b)$($\{5,3,2,4,5,3,4,2,1\}$ 的后缀非严格最大值序列是 $\{5,5,4,2,1\}$),比较它们的字典序,如果 $f(a)>f(b)$ 则 $a$ 胜,如 $f(a)< f(b)$ 则 $b$ 胜,如 $f(a)=f(b)$ 则平局。
上述过程是可以 dp 的。我们设计 $f_{v,0/1}$ 表示填完了所有 $\ge v$ 的数的序列中,b 胜、平局的序列数量(注意 $1$ 表示平局)。a 胜的概率可以减出来。
当我们从 $f_{v+1,1}$ 转移到 $f_{v,1}$ 的时候,因为当前还是平局,我们则可以选择往两个序列的末尾同时添加相同数量的 $v$,这样后缀非严格最大值序列依旧相等:
$$ \boxed{\begin{matrix} \quad\quad\quad \\ \quad\quad\quad \end{matrix}} \quad \begin{matrix} v & v & \cdots \\ v & v & \cdots \end{matrix} $$
同时我们还可以将 $v$ 随意地插入到前面的位置(但是不能插入到最后),因为关心的只是后缀最大值的关系,这样不会改变胜负情况。
每次转移时,我们枚举 $d$ 表示往两个序列的末尾同时添加的 $v$ 的数量,对于 a,还剩下 $cnt_{a,v}-d$ 个 $v$,插入到 $cnt_{a,>v}$ 个位置(最后一个位置不能插入),插板法计算方案数即可。$b$ 同理。
从 $f_{v+1,1}$ 转移到 $f_{v,0}$ 时,即此时我们需要让 b 获胜,也就是我们需要至少在 b 的最后面多放一个 $v$。
依旧枚举 $d$,对于 a,还剩下 $cnt_{a,v}-d$ 个 $v$,插入到 $cnt_{a,>v}$ 个位置。而对于 b,还剩下 $cnt_{b,v}-d-1$ 个 $v$(提前放了一个),插入到 $cnt_{b,>v}+1$ 个位置(最后一个段允许放更多的 $v$)。由于 $v$ 互不区分,我们认为单独的 $v$ 放在配对的 $(v,v)$ 后面,故不会产生多余贡献。
而从 $f_{v+1,0}$ 转移到 $f_{v,0}$ 时,我们不再需要枚举 $d$,因为两者已经分出胜负,再怎么插入也是没用的。对于 a,还剩下 $cnt_{a,v}-d$ 个 $v$,插入到 $cnt_{a,>v}+1$ 个位置,b 同理。
考虑 $k$ 不为 $0$ 怎么办。此时我们记 $\times$ 表示一个炸弹,炸弹将整个序列划分成若干个部分:
$$ \boxed{\begin{matrix} \quad\quad \\ \quad\quad \end{matrix}} \quad \begin{matrix} \times \\ \boxed{\phantom{v}} \end{matrix} \quad \boxed{\begin{matrix} \quad\quad \\ \quad\quad \end{matrix}} \quad \begin{matrix} \times \\ \boxed{\phantom{v}} \end{matrix} \quad \boxed{\begin{matrix} \quad\quad \\ \quad\quad \end{matrix}} $$
考虑对于一个结尾是炸弹的段:
$$ \boxed{\begin{matrix} \quad A\quad \\ \quad B\quad \end{matrix}} \quad \begin{matrix} \times \\ \boxed{C} \end{matrix} $$
如果它是合法的(炸弹刚好符合我们的预期,和 $C$ 一起走了),那么要么 $f(A)=f(B)$,要么 $f(A)>f(B)$ 且 $f(A)< f(B+C)$。
前者是相对容易处理的,我们观察后者有什么性质。
既然 $f(A)>f(B)$,从上面的 dp 思路去考虑,就是转移到某个 $v$ 时,原本两个序列是非严格后缀最大值序列相等的,但是我们在 a 序列后面多添加了一个 $v$,使得 $f(A)>f(B)$ 了(类比上面 dp 我们在 b 序列后面添加一个 $v$ 使得 b 获胜),但是为了使得 $f(B+C)>f(A)$,那么必然是因为 $C$ 这个位置填了一个 $>v$ 的数。
于是我们考虑将这个融合进 dp 里,设计 $f_{v,x,y,z=0/1}$ 表示考虑完了所有 $\ge v$ 的数,此时有 $x$ 个炸弹匹配的数还没有确定($< v$),剩下 $k-x$ 个炸弹匹配的数确定了($\ge v$),其中有 $y$ 个炸弹前面的段的非严格后缀最大值序列相等。现在是 b 获胜还是平局(平局是 $1$)。
从 $f_{v+1,*,*,*}$ 转移到 $f_{v,*,*,*}$ 时,我们枚举 $a\le x,b\le y,c\le z$ 和 $d$,分别表示:
- 选择 $a$ 个还没有确定匹配数的炸弹,匹配上 $v$;
- 选择 $b$ 个确定了匹配数,前面非严格后缀最大值相等的炸弹,在前面的 a 段后面多添加一个 $v$,使得 $f(A)>f(B)$(而因为确定了的匹配数必然是 $\ge v+1$ 的,所以也满足 $f(B+C)>f(A)$);
- 如果是平局($z=1$),可以选择在最后一段的 b 后面添加一个 $v$($c=1$)使得 b 获胜。
- 我们目前要求平局的段有三种,分别是 $x$ 个还没有确定匹配数的段,$y$ 个前面还是平局的段,以及 $z$ 这一段表示最后还有没有平局。我们枚举 $d$ 表示同时添加的 $(v,v)$ 对的数量,然后划分给这 $x+y+z$ 个位置。
转移也是容易的,先是 $\binom{x}{a}\binom{y}{b}$ 表示选择段的方案,然后插板法插入 $d$ 个对给 $x+y+z$ 个段。
此时 a 还有 $cnt_{a,v}-b-d$ 个 $v$,分给 $cnt_{a,>v}+k+1-(x+y-b+z)$ 个空位;b 还有 $cnt_{b,v}-a-c-d$ 个 $v$,分给 $cnt_{b,>v}+x+1-(x+y+z-c)$ 个空位,插板法计算。
转移到 $f_{v,x-a,y-b+a,z-c}$。
由于 b 获胜、平局都必须使用完所有 $k$ 个炸弹,所以初值是 $f_{\infty,k,0,1}=1$。
平局的答案是 $\sum f_{1,0,i,1}$,b 获胜同理,a 获胜减一下就好了。
时间复杂度是 $O(nk^4)$ 的。