首页 > 其他分享 >【题解】ABC237G Row Column Sums 2(感谢强大 alpha!!1【3】)

【题解】ABC237G Row Column Sums 2(感谢强大 alpha!!1【3】)

时间:2022-12-01 16:55:25浏览次数:44  
标签:right frac ABC237G 题解 Sums ret mul yw left

题意:求 \(n\times n\) 方阵个数,满足每列之和为 \(R_i\),每行之和为 \(C_i\) 。
数据范围:\(0\leq R_i,C_i\leq 2\),\(n\leq 10^7\) 。

转二分图,相当于限定左侧每个点和右侧每个点的度数。\(R,C=0\) 的行 / 列是无用的,去掉以后,我们认为还剩下 \(n\) 行 \(m\) 列。此时记录 \(r_1,r_2,c_1,c_2\) 分别表示度数为 \(1\) / \(2\) 的行 / 列个数(\(r_1+r_2=n\),\(c_1+c_2=m\)),判掉非法情况(\(r_1+2r_2\not=c_1+2c_2\))。

使用四元 EGF \(\begin{bmatrix}\frac{x^{r_1}y^{r_2}z^{c_1}w^{c_2}}{r_1!r_2!c_1!c_2!}\end{bmatrix}\) 计算:

  • 环的 EGF:\(\frac{1}{2}\left(\ln \frac{1}{1-yw}-yw\right)\) 。
  • 行 - 行 链的 EGF:\(\frac{1}{2}\frac{x^2w}{1-yw}\) 。
  • 列 - 列 链的 EGF:\(\frac{1}{2}\frac{yz^2}{1-yw}\) 。
  • 行 - 列 链的 EGF:\(\frac{xz}{1-yw}+\color{red}{yw}\)(注意到允许重边)。

即答案为:

\[\begin{bmatrix}\frac{x^{r_1}y^{r_2}z^{c_1}w^{c_2}}{r_1!r_2!c_1!c_2!}\end{bmatrix}\exp\left(\frac{1}{2}\left(\ln \frac{1}{1-yw}-yw\right)+\frac{1}{2}\frac{x^2w+yz^2}{1-yw}+\frac{xz}{1-yw}+yw\right) \]

然后换元:\(y\rightarrow st,w\rightarrow t^{-1},x\rightarrow uv,z\rightarrow v^{-1}\),再令 \(k=r_2-c_2\)(不失一般性地认为 \(k\geq 0\))有:

\[\begin{aligned} ans&=[s^{r_2}t^{k}u^{r_1}v^{-2k}]\exp\left(\frac{1}{2}\left(\ln \frac{1}{1-s}-s\right)+\frac{1}{2}\frac{u^2v^2/t+st/v^2}{1-s}+\frac{u}{1-s}+s\right)\\ &=[s^{r_2}t^{k}u^{r_1}v^{-2k}]\frac{e^{s/2}}{\sqrt{1-s}}\exp\left(\frac{1}{2}\frac{u^2v^2/t+st/v^2}{1-s}+\frac{u}{1-s}\right)\\ &=[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}[u^{r_1}]\exp\left(\frac{u}{1-s}\right)[t^{k}v^{-2k}]e^{\frac{1}{2}\frac{u^2v^2/t+st/v^2}{1-s}}\\ &=[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}[u^{r_1}]\exp\left(\frac{u}{1-s}\right)\sum_{i\geq 0}\frac{1}{i!(i+k)!}\left(\frac{1}{2}\frac{u^2}{1-s}\right)^i\left(\frac{1}{2}\frac{s}{1-s}\right)^{i+k}\\ &=[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}\sum_{i\geq 0}\frac{1}{i!(i+k)!(r_1-2i)!}\left(\frac{1}{1-s}\right)^{r_1-2i}\left(\frac{1}{2}\frac{1}{1-s}\right)^i\left(\frac{1}{2}\frac{s}{1-s}\right)^{i+k}\\ &=[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}\frac{s^k}{2^k(1-s)^{k+r_1}}\sum_{i\geq 0}\frac{s^i2^{-2i}}{i!(i+k)!(r_1-2i)!}\\ \end{aligned} \]

\(\frac{e^{s/2}}{\sqrt{1-s}}\) 是 D-finite 的,\(\frac{s^k}{2^k(1-s)^{k+r_1}}\) 也是 D-finite 的。而 \(F(s)=\sum\limits_{i\geq 0}\frac{s^i2^{-2i}}{i!(i+k)!(r_1-2i)!}\),发现 \([s^n]F(s)/[s^{n-1}]F(s)=\frac{(r_1-2n+2)(r_1-2n+1)}{4n(n+k)}\) 是关于 \(n\) 的有理分式,故 \(F(s)\) 是广义超几何函数,是 D-finite 的。即:

\[\begin{aligned} ans&=\frac{1}{k!r_1!}[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}\frac{s^k}{2^k(1-s)^{k+r_1}}\sum_{i\geq 0}\frac{s^i2^{-2i}r_1^{\underline{2i}}}{i!(k+1)^{\overline{i}}}\\ ans&=\frac{1}{k!r_1!}[s^{r_2}]\frac{e^{s/2}}{\sqrt{1-s}}\frac{s^k}{2^k(1-s)^{k+r_1}}{}_pF_q\left(-\frac{r_1}{2},-\frac{r_1-1}{2};k+1;s\right)\\ \end{aligned} \]

于是,在 \(r_1,k\) 是定值时,答案是关于 \(r_2\) 的整式递推。

\({}_pF_q\left(-\frac{r_1}{2},-\frac{r_1-1}{2};k+1;s\right)\) 可以直接算出每一项,我们只要解决 \(F=\frac{e^{s/2}\sqrt{1-s}}{(1-s)^{t}}\)(令 \(t=k+r_1+1\))。令 \(G=e^{s/2}\sqrt{1-s},H=\frac{1}{(1-s)^t}\),有 \(G'=\frac{1}{2}\frac{-sG}{1-s},H'=\frac{-tH}{1-s}\) 。于是有:

\[\begin{aligned} F'=\frac{G'H-GH'}{H^2}=\frac{1}{H}\left(\frac{1}{2}\frac{-sG}{1-s}+\frac{-tG}{1-s}\right)=\frac{G}{H}\frac{-s+2t}{2-2s} \end{aligned} \]

即 \((2-2s)F'=(2t-s)F\),初值是 \(F_0=1,F_1=t\),对比系数递推即可。

时间复杂度 \(O(n+\log p)\) 。

int Q, r1, r2, c1, c2, n, m, k, t, f[N];

signed main () {
	init ();

	IN (Q);
	for (int r, i = 1; i <= Q; ++ i) if (IN (r), r) r == 1 ? ++ r1 : ++ r2;
	for (int c, i = 1; i <= Q; ++ i) if (IN (c), c) c == 1 ? ++ c1 : ++ c2;
	if (r1 + 2 * r2 != c1 + 2 * c2) return puts ("0"), 0;

	if (r2 < c2) swap (r1, c1), swap (r2, c2);
	n = r1 + r2, m = c1 + c2, k = r2 - c2, t = k + r1 + 1;

	f[0] = 1, f[1] = t;
	lep (i, 1, r2 - k - 1)
		f[i + 1] = mul (mul (inv2, inv[i + 1]), dec (mul (2 * t + 2 * i, f[i]), f[i - 1]));

	int ret = 0, buf = 1;
	lep (i, 0, r2 - k) {
		if (i * 2 > r1) break ;

		int coef = mul (buf, mul (mul (ifac[i], ifac[i + k]), ifac[r1 - 2 * i]));
		pls (ret, mul (f[r2 - k - i], coef)), buf = mul (buf, mul (inv2, inv2));
	}
	ret = mul (ret, qpow (2, mod - 1 - k));

	ret = mul (ret, fac[r1]);
	ret = mul (ret, fac[r2]);
	ret = mul (ret, fac[c1]);
	ret = mul (ret, fac[c2]);

	printf ("%d\n", ret);
	return 0;
}

标签:right,frac,ABC237G,题解,Sums,ret,mul,yw,left
From: https://www.cnblogs.com/qiulyqwq/p/16941937.html

相关文章

  • 剑指offer题解C++版
    一,常见数据结构1,数组3-找出数组中重复的数字4-二维数组中的查找5-替换空格29-顺时针打印矩阵leetcode989-数组形式的整数加法leetcode26-删除有序数组中的重复......
  • 问题解决系列:遇到tomcat的假死问题,如何排查问题
    (文章目录)问题场景线上,有时候会遇到一种这样的情况:tomcat没有奔溃退出,输出日志也没有异常,但是界面访问就一直卡着。假如遇到这种情况,没错,你遇到了tomcat假死问题了。那么......
  • Charles中contents出现中文乱码问题解决
    检查证书是否过期,如过期,先重置过期证书再安装证书  SSLProxyingSettings中include设置*:443  即可解决contents中文乱码问题......
  • R6PL - Harbinger vs Sciencepal题解
    R6PL-HarbingervsSciencepal题面翻译彩虹6是大学里非常流行的游戏。你的两个朋友小A和小B是优秀的玩家,他们想要参与竞争。所以他们决定组建自己的团队。有2*N的......
  • NOIP2022T1题解
    [NOIP2022]种花(民间数据)题目描述小C决定在他的花园里种出\(\texttt{CCF}\)字样的图案,因此他想知道\(\textttC\)和\(\textttF\)两个字母各自有多少种种花的方......
  • P6007题解
    P6007[USACO20JAN]SpringboardsG题目描述Bessie在一个仅允许沿平行于坐标轴方向移动的二维方阵中。她从点\((0,0)\)出发,想要到达\((N,N)\)(\(1\leqN\leq10^9\))......
  • P3514题解
    给一个只有1和2的序列,每次询问有没有一个子串的和为xSPJ对于格式的要求较为严格。对于每个询问后,应紧跟一个换行符。在最后一次输出你的答案以及一个换行符后不应有任何输......
  • 道路游戏——题解
    单调队列优化-道路游戏[NOIP2009普及组]道路游戏题目描述小新正在玩一个简单的电脑游戏。游戏中有一条环形马路,马路上有\(n\)个机器人工厂,两个相邻机器人工厂之间......
  • 题解——红黑树
    进制运算-红黑树题目描述红黑树是一类特殊的二叉搜索树,其中每个结点被染成红色或黑色。若将二叉搜索树结点中的空指针看作是指向一个空结点,则称这类空结点为二叉搜索树的......
  • 题解——GCD
    给定正整数\(n\),求\(1\lex,y\len\)且\(\gcd(x,y)\)为素数的数对\((x,y)\)有多少对。\(n\le10^7\)题解做法1题意即为求\(S=\sum_{质数p|n}\sum_{i=1}^n\sum_{......