P11655 「FAOI-R5」Lovely 139

Posted on 2025-04-18 23:18  K_J_M  阅读(11)  评论(0)    收藏  举报

「FAOI-R5」Lovely 139

题目描述

对于一个 \(\tt 01\)\(S\)(下标从 \(1\) 开始),我们定义它的一个区间 \([l,r]\)极长颜色段,当且仅当它同时满足以下条件:

  • 如果 \(l\neq 1\)\(S_{l-1}\neq S_l\)
  • 如果 \(r\neq \lvert S\rvert\)\(S_{r+1}\neq S_r\)
  • \(\forall i\in[l,r),S_i=S_{i+1}\)

定义 \(g(S)\)\(S\)不同极长颜色段数。

定义 \(f(n,m)\) 的值为所有恰好包含 \(\boldsymbol n\)\(\tt 0\)\(\boldsymbol m\)\(\tt 1\)\(\tt 01\)\(S\)\(g(S)\) 之和。

你需要回答 \(T\) 个问题,每次给出 \(n,m\) 的值,求 \(f(n,m)\) 的值对 \(10^9+7\) 取模后的结果。

Solution

排列组合好题!

赛时想到一个 35pts 的做法,这里讲一下。

我们考虑固定 \(g(S)\) 的答案来计数。

举例来说,\(g(S)\) 的取值为 \([1,2\times \min(n,m)+[n≠m]]\),具体请读者自证。然后我们对于 \(i∈[1,2\times \min(n,m)+[n≠m]]\),求出 \(g(S)=i\)\(S\) 的数量。

不妨设 \(2\times \min(n,m)+[n≠m]=k\),现在求 \(g(S)=i\)\(S\) 的数量。我们可以想象每一段极长的字段看作 \(0,1\),那么 \(S\) 就变成了 \(0101\dots 010\)。这里需要分情况讨论一下。

如果 \(2\ |\ i\),那么我们的 \(S\) 肯定为 \(0101\dots 0101\) 或者 \(1010\dots 1010\),这样我们 \(1\) 的个数有 \(\frac{i}{2}\) 个。不妨记每一个 \(1\) 中包含了 \(x_j\)\(1\),每一个 \(0\) 中包含了 \(y_j\)\(0\),那么则满足

\[\sum_{j=1}^{\frac{i}{2}}x_j=n \]

\[\sum_{j=1}^{\frac{i}{2}}y_j=m \]

注意,\(x_j,y_j∈\N_{+}\)。这样就转化为了求解上面两个不定方程的正整数解的个数了。通过很简单的组合数学知识可以得到第一个方程的解的个数为

\[{n-1 \choose \frac{i}{2}-1} \]

同理,第二个方程解的个数为

\[{m-1 \choose \frac{i}{2}-1} \]

所以当 \(2 \ | \ i\) 的时候,总共的满足 \(g(S)=i\) 的个数为

\[{n-1 \choose \frac{i}{2}-1} \times {m-1 \choose \frac{i}{2}-1} \]

当然这只是数量,我们还要乘上贡献 \(i\)

同理可以得到当 \(i\) 为奇数时的答案,因此我们的总答案为

\[\sum_{i=1}^{k}[i \bmod 2=1]\times {n-1 \choose \lfloor \frac{i-1}{2} \rfloor} \times {m-1 \choose {\lfloor \frac{i}{2} \rfloor-1} } \times i+[i \bmod 2 =0]\times {n-1 \choose \lfloor \frac{i-1}{2} \rfloor}\times {m-1 \choose \lfloor \frac{i}{2} \rfloor-1} \times i+\sum_{i=1}^{k}[i \bmod 2=1]\times {m-1 \choose \lfloor \frac{i-1}{2} \rfloor} \times {n-1 \choose {\lfloor \frac{i}{2} \rfloor-1} }\times i+[i \bmod 2 =0]\times {n-1 \choose \lfloor \frac{i-1}{2} \rfloor}\times {m-1 \choose \lfloor \frac{i}{2} \rfloor-1} \times i \]

式子可能有点丑,而且也只能拿到 35pts。下面开始讲正解

知周所众,排列组合最讲究的就是计算贡献。这里我们考虑贡献的来源是什么。

我们 \(g(S)\) 是由存在相邻的两个不相等的数字的来的,那我们不妨假设 \(S\) 的某一个位置上为 \(01\),那么显然,它会对答案贡献 \(+1\)。也就是说,对于其他 \(n+m-2\) 个位置来说,它们随便怎么排都可以,因为我已经固定了这两个位置,它们是一定会产生贡献的。所以,其它 \(n+m-2\) 个位置排列 \(n-1\)\(1\) 的方案数有 \({n+m-2 \choose n-1}\),但是对于 \(n+m-1\) 个这样的相邻的一对来说,我们的贡献需要乘上 \(n+m-1\),而且 \(01\)\(10\) 也是不同的,所以我们的总贡献为

\[{n+m-2 \choose n-1}\times (n+m-1) \times 2 \]

但是有一点需要注意,我们在考虑完 \(x\) 对这样的 \(01\) 时,会产生 \(x+1\) 的答案,例如 \(S=0110011101\) 中有 \(5\) 对这样的 \(01\),但是 \(g(S)=6\),所以我们的总答案还要加上 \(n\)\(1\)\(m\)\(0\) 能组成的 \(S\) 的个数,这样的个数有 \({n+m \choose n}\) 个。

所以,我们的答案为

\[{n+m \choose n}+{n+m-2 \choose n-1}\times (n+m-1) \times 2 \]

Ac Code