contest2583-b-solution

Contest2583 B Solution

link

考虑反过来考虑:将长度为 \(a_n\) 的字符串中间插入若干字符依次得到长度分别为 \(a_{n-1}\sim a_1\) 的字符串,求方案数。

我们发现在小字符串中间插入一个字符得到的大字符串时会出现重复的,例如在 iorito 前或者 r 前插入一个 o 得到的都是 ioorit

这启发我们找到一种去重方式:让每次插入的字符与其后面的字符不相同。

于是在长度为 \(len\) 的字符串中插入一个字符得到的字符串共有 \((m-1)^{len}\times m\) 种(在字符串最后插没有限制)。

现在来考虑一次插 \(d\) 个字符如何处理。

你发现按上面的方法一个一个插显然是会重复的,那我们在这个思路基础上进行修改:

我们枚举有 \(j\) 个字符插在了某个字符的前面,那么有 \(d-j\) 个字符插在了最后。

那么插在最后的方案数就是 \(m^{d-j}\),而通过插板法可以知道插在前面的方案数是 \((m-1)^i\times\binom{len-1}{len+j-1}\),其中 \(len\) 是短字符串的长度。

所以最后的答案就为

\[\prod_{i=2}^n\sum_{j=0}^dm^{d-j}(m-1)^j\binom{a_{i-1}-1}{a_{i-1}+j-1} \]

直接计算即可。

posted @ 2024-02-29 07:55  iorit  阅读(21)  评论(0)    收藏  举报