Problem. D

题意简述:

求在\(n\times m\)的棋盘上放若干个炮,使得炮相互不攻击的方案数,答案对\(998244353\)取模。

数据范围:

\(1\le n\le m\le10^5\)

解法:

首先我们知道互不攻击等价于每行每列炮的数目\(\le2\)
然后考虑进行一个套路的转化:我们给每行每列建一个点,在\((x,y)\)处放一个炮就在\(x\)行对应的点和\(y\)列对应的点之间连一条无向边。
这样我们会建出来一个\(n+m\)个点的二分图,其中左侧\(n\)个点,右侧\(m\)个点。
很显然的是放炮的方案和二分图的连边情况一一对应,且一个连边方案合法的充要条件是每个点的度数\(\le2\)
因为每个点的度数\(\le2\)且这是一个二分图,所以这个图由一些偶环和一些奇链、偶链构成。
我们先考虑这三者的EGF:
偶环:
一个包含\(2k(k\ge2)\)个点的偶环有\(k\)个左侧点和\(k\)个右侧点,其圆排列数为\(\frac{(k!)^2}{2k}\)
因此偶环的EGF为\(F(x,y)=\sum\limits_{i=2}^{+\infty}\frac1{2i}x^iy^i\)
偶链:
我们认为偶链的起点在左侧,终点在右侧。
一个包含\(2k(k\ge1)\)个点的偶链有\(k\)个左侧点和\(k\)个右侧点,其排列数为\((k!)^2\)
因此偶链的EGF为\(G(x,y)=\sum\limits_{i=1}^{+\infty}x^iy^i\)
奇链:
不妨考虑\(k\)个左侧点和\(k+1\)个右侧点的情况,其排列数为\((2k+1)!\)
但是一条奇链会在两端被计算\(2\)次,因此答案要乘\(\frac12\)
\(k+1\)个左侧点和\(k\)个右侧点的情况同理。
因此奇链的EGF为\(H(x,y)=x+y+\frac12\sum\limits_{i=1}^{+\infty}x^iy^i(x+y)\)
那么最终的答案就是\(n!m![x^nm^y]\exp(F(x,y)+G(x,y)+H(x,y))\)
但是这是个二元EGF的形式,根本无法处理。
注意到在偶环和偶链的EGF中\(x,y\)的指数都是相同的,而在奇链的EGF中\(x,y\)指数最多也只有\(1\)的差别。
因为我们要计算的是\(x^ny^m\)的系数,而一个左部的奇环会使得\(x\)的次数比\(y\)的次数大\(1\),一个右部的奇环会使得\(y\)的次数比\(x\)的次数大\(1\),因此右部的奇环比左部的奇环多\(m-n\)个。
因此我们可以通过枚举左侧奇环的个数来将答案转化为一元EGF的形式。
先考虑这三个部分的一元EGF:
偶环:\(F(x)=\sum\limits_{i=2}^{+\infty}\frac1{2i}x^i\)
偶链:\(G(x)=\sum\limits_{i=1}^{+\infty}x^i\)
奇链:\(H(x,y)=x+\frac12\sum\limits_{i=2}^{+\infty}x^i\)
那么最终的答案就是\(n!m![x^m]\exp(F(x)+G(x)\sum\limits_{i=0}^n\frac{H(x)^{m-n+2i}}{x^ii!(m-n+i)!}\)
\(P(x)=\sum\limits_{i=0}^{+\infty}\frac{x^i}{i!(m-n+i)!},Q(x)=\frac{H(x)^2}{x}\)
那么答案就是\(n!m![x^m]\exp(F(x)+G(x))H(x)^{m-n}P(Q(x))\)
注意到\(H(x)=\frac12(x+\frac x{1-x})\)
因此有\(Q(x)=\frac{x^3-4x^2+4x}{4(x-1)^2}\)
那么我们有\(P(Q(x))=\sum\limits_{i=0}^{+\infty}\frac{Q(x)^i}{i!(m-n+i)!}=\sum\limits_{i=0}^{+\infty}\frac{(x^3-4x^2+4x)^i}{4^ii!(m-n+i)!(x-1)^{2i}}\)
分治NTT即可计算。

posted @ 2020-02-10 20:20  Shiina_Mashiro  阅读(237)  评论(0编辑  收藏  举报