在历史的不同时刻,不断的有相同的事情发生。而在历史的相同时刻——就是当下——神祇割裂,诸天混战。我愿称之为,诸神黄昏。
\[\color{red}{\text{校长者,真神人也,左马桶,右永神,会执利笔破邪炁,何人当之?}} \\
\begin{array}{|}
\hline
\color{pink}{\text{The principal is really a god}} \\
\color{pink}{\text{with a closestool on the left and Yongshen on the right}} \\
\color{pink}{\text{holding a sharp pen to pierce the truth}} \\
\color{pink}{\text{Who can resist him? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{green}{\text{校長は本当に神であり、左側にトイレ、右側にヨンシェンがあり}} \\
\color{green}{\text{鋭いペンを持って真実を突き刺している。誰が彼に抵抗できるだろうか? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{lightblue}{\text{Le principal est vraiment un dieu}} \\
\color{lightblue}{\text{avec des toilettes à gauche et Yongshen à droite}} \\
\color{lightblue}{\text{tenant un stylo pointu pour percer la vérité}} \\
\color{lightblue}{\text{Qui peut lui résister ? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{purple}{\text{Der Direktor ist wirklich ein Gott}} \\
\color{purple}{\text{mit einer Toilette links und Yongshen rechts}} \\
\color{purple}{\text{der einen spitzen Stift hält}} \\
\color{purple}{\text{um die Wahrheit zu durchdringen.}} \\
\color{purple}{\text{Wer kann ihm widerstehen? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{cyan}{\text{Principalis deus est, Yongshen a dextris cum latrina}} \\
\color{cyan}{\text{acuto stylo ad perforandum veritatem: quis resistet ei? }} \\
\hline
\end{array} \\
\color{red}{\text{对曰:“无人,狗欲当之,还请赐教!”}} \\
\newcommand\bra[1]{\left({#1}\right)}
\newcommand\Bra[1]{\left\{{#1}\right\}}
\newcommand\dx[0]{\text{dx}}
\newcommand\string[2]{\genfrac{\{}{\}}{0pt}{}{#1}{#2}}
\newcommand\down[2]{{#1}^{\underline{#2}}}
\newcommand\ddiv[2]{\left\lfloor\frac{#1}{#2}\right\rfloor}
\newcommand\udiv[2]{\left\lceil\frac{#1}{#2}\right\rceil}
\newcommand\lcm[0]{\operatorname{lcm}}
\newcommand\set[1]{\left\{{#1}\right\}}
\]
壹、题目描述 ¶
题目背景
原题链接(付费题目) 😦
给定 \(N,M,K\),求
\[{\Large\forall} \set{a}\set{b}\;\text{s.t.}\;\sum_{i=1}^Ka_i=N\;\land\;\sum_{i=1}^Kb_i=M,\;\sum\bra{\prod_{i=1}^K\min\set{a_i,b_i}}\pmod{998244353}
\]
其中 \(a_i,b_i,N,M,K\) 均为正整数。
数据范围
data |
\(N,M,K\) |
\(T\) |
\(1\)~\(4\) |
\(\leq5\) |
10 |
\(5\)~\(8\) |
\(\leq40\) |
100 |
\(9\)~\(12\) |
\(\leq100\) |
100 |
\(13,14\) |
\(\leq500\) |
100 |
\(15,16\) |
\(\leq1000\) |
100 |
\(17\)~\(20\) |
\(\leq5\times10^5\) |
100 |
贰、题解 ¶
神他吗生成函数还可以这么卷?
一般地,我们先考察符合条件的 \(\set{a},\set{b}\) 有多少,不妨先定义二元生成函数
\[F(x,y)=\bra{\frac{1}{1-x}-1}\bra{\frac{1}{1-y}-1}
\]
为什么要减去一呢?因为大家都是正整数!那么,符合条件的组合就是 \([x^Ny^M]F^K(x,y)\),不再解释。
现在,我们想要得到 \(G(x,y)\),并且其满足
\[G(x,y)=\sum_{i=1}^\infty\sum_{j=1}^\infty \min(i,j)\times x^iy^j
\]
这样,\([x^Ny^M]G^K(x,y)\) 就是答案!
如何得到 \(G(x,y)\) 呢?神、家具、还有中学校长 都各抒己见:
\(\sf God-OneInDark\):哟!这不有手就行的构造题吗?几天不见怎么变得那么垃圾了?
思路一 —— 永神至学:周虽旧邦,其命维新;神教初立,其学至尊。 —— 《 \(\sf OID\) 教典 》
现在问题是 \(\min(a,b)(a,b\ge 1)\) 该怎么搞出来,不难发现:
\[x^ay^b=(xy)^{\min(a,b)}\times x^{a-\min(a,b)}y^{b-\min(a,b)}
\]
那么,我们就数每一个 \(x^ay^b\) 有多少个 \(xy\) 就行了。可以使用贡献法,\(x^0y^0\) 贡献为 \(1\),\(x^1y^1\) 贡献一个,\(x^2y^2\) 有一个贡献.....\(x^{\min(a,b)-1}y^{\min(a,b)-1}\) 有一个贡献,即:
\[\min(a,b)x^ay^b=\sum_{i=0}^{\min(a,b)-1}(xy)^ix^{a-i}y^{b-i}
\]
咋一看有点像卷积啊?由于我们有
\[F(x,y)=\sum_{i=1}^\infty\sum_{j=1}^\infty x^iy^j
\]
不难发现,我们竭尽全力想要构造的 \(G(x,y)\),竟然就是
\[F(x,y)\cdot\bra{\sum_{i=0}^\infty(xy)^i}
\]
心态炸了. 显然使用 \(\rm FFT\) 之类的东西是不理想的,但是我们可以考虑枚举 \(xy\) 的次数 \(i\in [0,\min(N,M)-1]\),那么,\(x,y\) 分别的指数就可以算得为 \(N-i,M-i\),至于其系数就不必多言了罢?
\(\sf Furniture-Closestool\):不推式子的人他[哔]还活着啊?
思路二 —— 马桶不朽:马桶来到人间,自始至终,每个思想都充斥着恶臭。 ——《 马桶福音 》
FBI Warning:以下过程过于恶臭,请适当吸入;若单次使用当量过大,则会对使用者生命造成危害。
为什么不能暴力地推式子呢?我们直接将 \(G(x,y)\) 展开,看看它到底是什么玩意:
\[G(x,y)=
\begin{array}{}
&x^1y^1&+x^1y^2&+x^1y^3&+x^1y^4&+\cdots \\
&+x^2y^1&+2x^2y^2&+2x^2y^3&+2x^2y^4&+\cdots \\
&+x^3y^1&+2x^3y^2&+3x^3y^3&+3x^3y^4&+\cdots \\
&+x^4y^1&+2x^4y^2&+3x^4y^3&+4x^4y^4&+\cdots
\end{array}
\]
可以对 \(x\) 使用扰动法:
\[G(x,y)-xG(x,y)=
\begin{array}{}
&x^1y^1&+x^1y^2&+x^1y^3&+x^1y^4&+\cdots \\
&&+x^2y^2&+x^2y^3&+x^2y^4&+\cdots \\
&&&+x^3y^3&+x^3y^4&+\cdots \\
&&&&+x^4y^4&+\cdots \\
\end{array} \\
\Rightarrow G(x,y)=\frac{x^1y^1+(x^1+x^2)y^2+(x^1+x^2+x^3)y^3+...}{1-x}
\]
发现还可以对 \(y\) 使用扰动法:
\[yG(x,y)=\frac{x^1y^2+(x^1+x^2)y^3+(x^1+x^2+x^3)y^4+\cdots}{1-x} \\
\Rightarrow (1-y)G(x,y)=\frac{x^1y^1+x^2y^2+x^3y^3+\cdots}{1-x} \\
\Rightarrow G(x,y)=\frac{xy(1+xy+x^2y^2+\cdots)}{(1-x)(1-y)} \\
\Rightarrow G(x,y)=\frac{xy}{(1-x)(1-y)(1-xy)}
\]
通过简单的变换,发现和上面是一样的,于是,我们通过两次扰动法得到了同样的结果......
数学,是美的!—— 王宇轩
\(\sf Principal\):你连承认自己是 [数据丢失] 的勇气都没有吗?
思路三 —— 原则至上:言有物,行有伦,论人格可称君子。—— 蔡元培
可以直接思考组合意义,看到有乘法,不难往其组合意义想,一般来说,乘法的组合意义有这两种:
- 每类物品(共 \(n\) 类)中各取一个,对于某一类可以有 \(a_i\) 种选法,总共 \(\prod a_i\) 种;
- 排列的每个数在 \([a_i,b_i]\) 之间,该位有 \(b_i-a_i+1\) 种选择,那么总共 \(\prod (b_i-a_i+1)\) 种;
这里,我们显然使用第二类意义,那么,就转化为了 —— 合法的 \(\set c\) 有多少?
再进行转化:考虑对于每个 \(\set c\) 有多少 \(\set a,\set b\) 能够满足上述条件(贡献法)
考虑枚举 \(s=\sum c_i\),那么,为了让 \(c_i\le \min(a_i,b_i)\) 成立,我们可以考虑构造 \(a_i,b_i\) 从 \(c_i\) 的基础上,即对于每一位,先默认 \(a_i=b_i=c_i\),然后将剩下的 \(N-s,M-s\) 分到 \(K\) 个位置上,可以不分给某个位置,这可以使用隔板法,那么,最后的答案就是:
\[\sum_{s=0}^{\min(N-K,M-K)}{s+K-1\choose K-1}{N-s-1\choose K-1}{M-s-1\choose K-1}
\]
说明:为了避免出现 \(0\),我们初始在所有位置上都填了一个 \(1\).
叁、参考代码 ¶
组合数学の板子你看不看?
肆、关键 の 地方 ¶
生成函数......暴力推柿子了。
但是从组合意义上,能将乘积转化为合法序列计数,再将合法序列计数通过贡献转化为插板,这是真的厉害了。