A
B

解题报告 P12405 「CZOI-R3」星光闪耀

解题报告 P12405 「CZOI-R3」星光闪耀

大困难题!

题目描述

形式化题意

给定一个可重集 \(S_0\),初始 \(S_0\) 中只有一个数 \(n\)

定义一次操作为:新建一个可重集 \(S_1\),对于 \(\forall1\le i\le|S_0|\),若 \(S_{0,i}\ge 2\),则对于 \(\forall1\le j\le S_{0,i}-1\),将 \(j\) 加入 \(S_1\)。在这次操作的最后,将 \(S_1\) 中所有元素加入 \(S_0\)

求进行了 \(m\) 次操作后的 \(\sum_{i=1}^{|S_0|} k^{S_{0,i}}\),对 \(998244353\) 取模。

输入格式

本题有多组测试数据。

第一行输入 \(1\) 个整数 \(T\)

接下来 \(T\) 行,每行输入 \(3\) 个整数 \(n,m,k\)

输出格式

\(T\) 行,每行输出 \(1\) 个整数,表示该组数据的答案。

输入输出样例 #1

输入 #1

5
3 4 6
8 2 5
501 501 6
11451 41919 313172124
824431 960532 10000007

输出 #1

420
610340
520860091
95420244
42443525

说明/提示

【数据范围】

本题采用捆绑测试

\(\sum n,\sum m\) 分别为单个测试点内 \(n,m\) 的和。

对于 \(100\%\) 的数据,\(1\le T\le5\times10^5\)\(1\le n\le2\times10^6\)\(1\le m\le2\times10^6\)\(\sum m\le2\times10^7\)\(0\le k\le998244352\)

一眼看我们发现这个玩意儿是不是很不可做?

这个题意是不是很看不懂?

没事,我们手膜一下就好了。

假设现在给定初始值是 \(4\)

第一次操作后,序列将变成:\(4、3、2、1\) --> \(4 \times 1、3 \times 1、2 \times 1、1 \times 1\)

第二次操作后,序列将变成:\(4、3、3、2、2、2、1、1、1、1\) --> \(4 \times 1、3 \times 2、2 \times 3、1 \times 4\)

第三次操作后,序列将变成:\(4、3、3、3、2、2、2、2、2、2、1、1、1、1、1、1、1、1、1、1\) --> \(4 \times 1、3 \times 3、2 \times 6、1 \times 10\)

第四次操作后,序列将变成:\(4、3、3、3、3、2、2、2、2、2、2、2、2、2、2、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1\) --> \(4 \times 1、3 \times 4、2 \times 10、1 \times 20\)

我们发现,第 \(n - i\) 个数出现的个数为它操作前比它大的数 + 之前它出现的个数。

\(cnt_{i,j}\) 为值为 \(i\) ,进行第 \(j\) 次操作的出现次数。

然后,就有 \(cnt_{i,j}\) = \(cnt_{i,j - 1} + \sum_{k = i + 1}^{n} cnt_{k,j - 1}\)

然后我们发现:欸!这不是杨辉三角嘛!

发现每一次操作的实际上是在杨辉三角上向下走一位。

初始就是杨辉三角的每一列的最后一个值(为 \(1\))。

所以实际上 \(cnt_{i,j} = \binom{m + 1 + n - i}{n - i}\)

那我们的答案就是 \(\sum_{i = 1}^{n}{\binom{m + 1 + n - i}{n - i} K^i}\)

也就是 \(\sum_{i = 0}^{n - 1}\binom{m + 1 + i}{i} K^{n - i}\)。(这个柿子更好看qwq)

这个东西我们很好求,但是我们发现时间复杂度是 \(O(\sum n)\) 的,也就是 \(O(Tn)\)

你会获得 10 pts的好成绩,加上特判能有 35 pts!

上边都是小儿科,只要现在还留在机房的基本都能一眼出。

下边的才是重头戏!

考虑优化这个柿子。

我们发现这个玩意儿很像一个等比数列求和。

但是有系数!(翻遍 Bing 也没找出怎么做带系数等比数列求和

总之先上等比数列求和公式再说。

\(S\) 等于上边这一坨。

然后就有

\[KS = \sum_{i = 0}^{n - 1}\binom{m + 1 + i}{i} K^{n - i + 1} \]

\[(K - 1)S = \sum_{i = 0}^{n - 1}\binom{m + 1 + i}{i} K^{n - i + 1} - \sum_{i = 0}^{n - 1}\binom{m + 1 + i}{i} K^{n - i} \]

\[(K - 1)S = K^{n + 1} + \sum_{i = 0}^{n - 2}(\binom{m + i + 2}{i + 1} - \binom{m + i + 1}{i})K^{n - i} - \binom{m + n}{n - 1}K \]

\[S = \frac{K^{n + 1} + \sum_{i = 0}^{n - 2}(\binom{m + i + 2}{i + 1} - \binom{m + i + 1}{i})K^{n - i} - \binom{m + n}{n - 1}K}{K - 1} \]

然后我们通过 OI-wiki 组合数性质,发现 \((\binom{m + i + 2}{i + 1} - \binom{m + i + 1}{i})\) 等于 \(\binom{m + i - 1}{i + 1}\)

那么原式就成了 \(\frac{K^{n + 1} + \sum_{i = 0}^{n - 2}\binom{m + i - 1}{i + 1}K^{n - i} - \binom{m + n}{n - 1}K}{K - 1}\)

我们发现,这样的话,枚举范围就变小了欸。

\([0,n - 1]\) 变成了 \([0,n - 2]\)

我们不妨设 \(dp_i\) 代表进行 \(i\) 次操作后的值。

\[dp_i = \sum_{j = 0}^{n - (m - i)} \binom{m + j - 1}{i} K^{n - j} \]

重复上边的过程。有

\[dp_i = \frac{\binom{m - 1}{i}K^{n + 1} + \sum_{j = 0}^{n - 2 - (m - 1 - i)}\binom{m + j}{i}K^{n - i} - \binom{m + n}{n - 1}K^{m - i}}{K - 1} \]

也就是

\[dp_i = \frac{\binom{m - 1}{i}K^{n + 1} + dp_{i - 1} - \binom{m + n}{n - 1}K^{m - i}}{K - 1} \]

然后发现这个东西可以递推(也就是把上边我们的化简(枚举区间减少)过程重复到 0)。

最后答案就是 \(dp_m\)

这样时间复杂度 \(O(\sum m)\)

然后你就获得 70 pts的好成绩www。

然后你发现你的预处理要处理 500 ms!

只有预处理的提交记录

然后你要把你的 \(O(n\log{n})\) 预处理改成 \(O(n)\) 的。

然后你就可以 AC 这道题啦 ~\ (≧▽≦) /~

完结撒花 ~\ (≧▽≦) /~ 。

posted @ 2025-11-21 20:07  MyShiroko  阅读(19)  评论(0)    收藏  举报