[Nowcoder-Contest5670-C]简单题 & 诸神黄昏

\[\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\):不推式子的人他[哔]还活着啊?

思路二 —— 马桶不朽:马桶来到人间,自始至终,每个思想都充斥着恶臭。 ——《 马桶福音[1]

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\):你连承认自己是 [数据丢失] 的勇气都没有吗?

思路三 —— 原则[2]至上:言有物,行有伦,论人格可称君子。—— 蔡元培[3]

可以直接思考组合意义,看到有乘法,不难往其组合意义想,一般来说,乘法的组合意义有这两种:

  1. 每类物品(共 \(n\) 类)中各取一个,对于某一类可以有 \(a_i\) 种选法,总共 \(\prod a_i\) 种;
  2. 排列的每个数在 \([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\).


叁、参考代码 ¶

组合数学の板子你看不看?

肆、关键 の 地方 ¶

生成函数......暴力推柿子了。

但是从组合意义上,能将乘积转化为合法序列计数,再将合法序列计数通过贡献转化为插板,这是真的厉害了。



  1. 由于名言改变自马克思的《 \(\gcd\) 宣言 》,有类似 “马桶降生” 的味道,因此此处标题使用了《圣经》中耶稣降生一章标题《马太福音》的类似版本。 ↩︎

  2. 原则(\(\rm principle\))与校长(\(\rm principal\))发音相似。 ↩︎

  3. 蔡元培先生曾任北京大学校长,故此处引用其发言,为校长之语录,亦有原则的味道。 ↩︎

posted @ 2021-09-07 18:12  Arextre  阅读(68)  评论(0编辑  收藏  举报