首页 > 其他分享 >降阶公式/ARC173F

降阶公式/ARC173F

时间:2024-04-11 19:33:05浏览次数:24  
标签:right frac matrix 公式 sum ARC173F 降阶 mod left

ARC173F

题意

给定 \(n,A,B\),初始有一个集合 \(S=\{1,2,\dots,A,A +1,A+2,\dots,A+B\}\)。进行如下操作 \(n-1\) 次使得剩下 \(n\) 个集合:

  • 从所有集合中选择一个,记为 \(S_0\)。
  • 从 \(S_0\) 中选择一个元素 \(a\) 满足 \(a\in[1,A]\),选择一个元素 \(b\) 满足 \(b\in[A+1,A+B]\)。
  • 将 \(S_0\) 分裂成两个集合 \(S_1,S_2\),其中 \(a\in S_1,b\in S_2\)。
  • 把 \(S_0\) 删掉,把 \(S_1,S_2\) 加入待选集合。

问有多少种本质不同操作方案,对 \(998244353\) 取模。

其中定义两种方案不同,当且仅当存在一步中 \((S_0,a,b,S_1,S_2)\) 中任意一个元素不同。

\(2\le n\le 2\times 10^5,1\le A,B\le 2\times 10^5,n\le A+B\)

Solution

倒序操作。

设最后得到的集合序列(即有标号)是 \(S_{1:n}\),\(S_i\cap [1,A]=a_i,b_i=|S_i|-a_i\)。

假设得到了这个序列怎么统计分裂方案数?把分裂看成连边,合并 \((u,v)\) 的贡献就是 \(a_ub_v+a_vb_u\)(一个左边一个右边),再求生成树的积和。容易验证,这样的计算是正确的。为了简化计算,我们认为可以节点自己连边。

使用矩阵树定理。设 \(a=(a_2,a_3,\dots a_n)^T\),\(b=(b_2,b_3,\dots b_n)^T\)。\(\det (L)=\det(\operatorname{diag}(Ab+Ba)-ab^T-ba^T)=\det(D-ab^T-ba^T)\)。

为了简化计算而非进行神秘的枚举容斥什么的,我们考虑分块矩阵的”降阶公式“:

\[\det \left |\begin{matrix}A & B\\C& D\end{matrix}\right|=|A||D-CA^{-1}B| \]

构造 \(B=0a\),那么:

\[\det(D-ab^T-ba^T)=\det \left|\begin{matrix}D-ab^T-ba^T & B & B\\a^T & 1& 0\\ b^T &0&1\end{matrix}\right| \]

而对其施加初等变换:

\[\det \left|\begin{matrix}D-ab^T-ba^T & B & B\\a^T & 1& 0\\ b^T &0&1\end{matrix}\right|=\det \left|\begin{matrix}D & b & a \\a^T & 1& 0\\ b^T &0&1\end{matrix}\right|=\det \left|\begin{matrix}D & b & a \\0 & 1-a^TD^{-1}b& -a^TD^{-1}a\\ 0 & -b^TD^{-1}b& 1-b^TD^{-1}a\end{matrix}\right|\\ \]

\[F=\left|\begin{matrix}1-a^TD^{-1}b& -a^TD^{-1}a\\ -b^TD^{-1}b& 1-b^TD^{-1}a\end{matrix}\right|\\ \]

那么:

\[\det(D-ab^T-ba^T)=|D||F-0|=|D||F| \]

而 \(D\) 的行列式容易计算。接下来只需计算这个二阶行列式。

\[|F|=(1-a^TD^{-1}b)(1-b^TD^{-1}a)-(a^TD^{-1}a)(b^TD^{-1}b) \]

而 \(D^{-1}=\operatorname{diag}(Ab+Ba)\) 的每项取倒数。

那么可以计算得到:

\[|F|=1-2\sum_{i=2}^n \frac{a_ib_i}{a_iB+b_iA}+\sum_{i=2}^n\sum_{j=2}^n \frac{a_ia_jb_ib_j}{(a_iB+b_iA)(a_jB+b_jA)}-\sum_{i=2}^n\sum_{j=2}^n \frac{a_i^2b_j^2}{(a_iB+b_iA)(a_jB+b_jA)}\\ |D|=\prod_{i= 2}^n (Ab_i+Ba_i) \]

那么我们可以有快速求出答案的希望了。考虑一组 \(a,b\) 序列对答案的贡献:最后得到了不应该是序列,而是集合的集合;用多项式系数算即可。还需要矩阵树的系数:贡献就是:

\[\frac{A!B!}{n}\prod _{i=1}^n \frac 1{a_i!b_i!} \]

得到答案的式子(略显抽象):

\[\frac{A!B!}{n}\sum_{\sum a_i=A,\sum b_i=B}\left(\prod_{i=1}^n \frac{1}{a_i!b_i!}\right)\left(\prod_{i= 2}^n (Ab_i+Ba_i)\right)\left(1-2\sum_{i=2}^n \frac{a_ib_i}{a_iB+b_iA}+\sum_{i=2}^n\sum_{j=2}^n \frac{a_ia_jb_ib_j}{(a_iB+b_iA)(a_jB+b_jA)}-\sum_{i=2}^n\sum_{j=2}^n \frac{a_i^2b_j^2}{(a_iB+b_iA)(a_jB+b_jA)}\right) \]

这个式子固然抽象,但是可以把求和每个拆开。在此之前,先证明引理:

\[P(x,y)=\sum_{i,j} a_{i,j}x^iy^j,Q(x,y)=\sum _{i,j}a_{i,j}x^{\underline i}y^{\underline{j}} \]

则:

\[\sum_{a,b\ge 0}\frac{P(a,b)x^ay^b}{a!b!}=Q(x,y)e^{x+y} \]

可以从模板下降幂多项式乘法那里得到。

由于篇幅原因,这里不给出全部推导,我们演示

\[\sum_{\sum a_i=A,\sum b_i=B}\left(\prod_{i=1}^n \frac{1}{a_i!b_i!}\right)\left(\prod_{i= 2}^n (Ab_i+Ba_i)\right)\left(-2\sum_{i=2}^n \frac{a_ib_i}{a_iB+b_iA}\right)\\ =-2\sum_{k=2}^n\sum_{\sum a_i=A,\sum b_i=B}\left(\frac{a_kb_k}{a_kB+b_kA}\right)\left(\prod_{i=1}^n \frac{1}{a_i!b_i!}\right)\left(\prod_{i= 2}^n (Ab_i+Ba_i)\right) \]

发现 \(k\) 的具体取值是无关紧要的。那么化为:

\[=-2(n-1)\sum_{a_1\le A,b_1\le B}\frac{a_1b_1}{a_1!b_1!}\sum_{a_2\le A-a_1,b_2\le B-b_1}\frac{1}{a_2!b_2!}\sum_{\sum_{i>2} a_i=A-a_1-a_2,\sum_{i>2} b_i=B-b_1-b_2}\left(\prod_{i=3}^n \frac{1}{a_i!b_i!}\right)\left(\prod_{i=3}^n (Ab_i+Ba_i)\right)\\ \]

设 \(P_1(x,y)=xy,P_2(x,y)=1,P_3(x,y)=Bx+Ay\),则 \(Q_1(x,y)=xy,Q_2(x,y)=1,Q_3(x,y)=Bx+Ay\)(一次的时候是没有变化的),那么这一部分答案就是:

\[-2(n-1)xye^{x+y}\times e^{x+y}\times (Bx+Ay)^{n-2}e^{(n-2)xy}=-2(n-1)xy(Bx+Ay)e^{n(x+y)} \]

其实可以把一些东西简化一下,这里就不展示了。

那么最后的答案就是

\[\frac{A!B!}{n}[x^Ay^B]e^{n(x+y)}\left((Bx+Ay)^{n-1}-2(n-1)xy(Bx+Ay)^{n-2}-(n-1)(n-2)(x^2y+xy^2+xy)(Bx+Ay)^{n-3}\right) \]

// Problem: [ARC173F] Select and Split
// Platform: Luogu
// URL: https://www.luogu.com.cn/problem/AT_arc173_f
// Memory Limit: 1 MB
// Time Limit: 2000 ms
// Author:British Union
// Long live UOB and koala
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353,maxn=4e5+5;
int fac[maxn],ifac[maxn],N=4e5,n,A,B;
int qp(int a,int b){
	if(b==0)return 1;
	int T=qp(a,b>>1);T=T*T%mod;
	if(b&1)T=T*a%mod;
	return T;
}
int C(int a,int b){
	if(b>a)return 0;
	// cout<<"C("<<a<<","<<b<<")="<<(fac[a]*ifac[b]%mod*ifac[a-b]%mod)<<endl;
	return fac[a]*ifac[b]%mod*ifac[a-b]%mod;
}
int gete(int a,int b){
	if(a<0||b<0)return 0;
	return qp(n,a+b)*C(a+b,a)%mod*ifac[a+b]%mod;
}
int calc(int t,int a,int b){
	if(t<0||a<0||b<0)return 0;
	int res=0;
	for(int i=0;i<=t;i++){
		(res+=C(t,i)*gete(a-i,b-(t-i))%mod*qp(B,i)%mod*qp(A,t-i))%=mod;
	}
	return res;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>A>>B;
	fac[0]=1;
	for(int i=1;i<=N;i++)fac[i]=fac[i-1]*i%mod;
	ifac[N]=qp(fac[N],mod-2);
	for(int i=N-1;i>=0;i--)ifac[i]=ifac[i+1]*(i+1)%mod;
	int res=calc(n-1,A,B)-2*(n-1)%mod*calc(n-2,A-1,B-1)%mod-(n-1)*(n-2)%mod*(calc(n-3,A-2,B-1)+calc(n-3,A-1,B-2)+calc(n-3,A-1,B-1))%mod;
	res=fac[A]*fac[B]%mod*qp(n,mod-2)%mod*res%mod;
	res=(res%mod+mod)%mod;
	cout<<res<<endl;
	return 0;
}

标签:right,frac,matrix,公式,sum,ARC173F,降阶,mod,left
From: https://www.cnblogs.com/british-union/p/18129923/arc173f

相关文章

  • PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式
    我要成为嵌入式高手之4月8日51单片机第三天!!————————————————————————————PWM        脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应......
  • UEditorPlus v2.5.0发布 Latex公式编辑,源码样式优化
    https://baijiahao.baidu.com/s?id=1746081463616396221&wfr=spider&for=pc UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。UEditorPlus是有ModStart团队基于UEditor二次开发的富文......
  • 扩展ueditor中公式插件kityformula的字符集
    https://blog.csdn.net/hshuaile/article/details/86079147 例如,我想在公式中使用"▱"符号,但是现有公式插件不支持输入,所以需要扩展,扩展步骤如下在网上找到"▱"符号,并起一个名字,例如叫parallelogram打开kity-formula-render.all.js文件,找到如下代码/*!*字体主文件*/_p[29]......
  • 一道好玩的组合数学的推公式题(绿名题, 1879C - Make it Alternating
    1879C-MakeitAlternating先贴代码,看能不能理解stra;llv[N];//装着01化为-1,1的数的数组llf[N];//装着预处理的组合数voidmoon(){cin>>a;n=0;m=a.size();eps(i,0,m+10)v[i]=0;//eps()是一个陋习,define定义的for循环for(autop:a){v[++n]=(p=='1'?1......
  • Mathtype 公式在正文中高于文字的问题
    1.解决办法出现如图所示的问题:或者正文中也有类似的问题时,可以通过保存现有或者新建一个格式正确的Mathtype公式,并将其保存成文件:之后选择格式化公式:之后等待格式更改完毕即可!2.参考链接[1]如何处理MathType公式和正文不在同一行[2]如何解决在Word中格式刷之后公......
  • 深度学习之详解常见梯度算法(概念、公式、原理、算法实现过程)
    目录前言一、如何实现梯度下降?二、梯度计算三、常见的梯度公式及梯度算法常见的梯度公式:1.标量对向量的梯度:2.标量对矩阵的梯度:3.向量对标量的梯度:常见梯度算法:四、常见梯度算法实现 1、批量梯度下降算法实现函数2、随机梯度下降算法实现函数 3、小批量梯度......
  • 博客园公式不支持度的解决方法
    Problem今天水题解的时候突然发现\(cnblogs\)的公式不太支持角度符号\(\degree\)​,即\degree。Solution改成\(1^\circ\),即1^\circ对比但是结果现在看哪个都不太顺眼……......
  • 尼奎斯特定理中,码元速率和信道带宽的公式为什么是B=2W
    初接触通信知识之前一直无法理解码元速率和信道带宽的转换公式B=2W。直至今日,仔细查资料和思考后得到答案。固做此笔记。以做记录。首先,之前一直困扰我的问题,究其原因是因为我搞错了带宽和速率的关系。所以在此,我们必须要将带宽和速率的关系给搞明白。为了方便理解,这里我们只......
  • Excel 公式积累-不常用又酷炫的小点
    1、动态渐变进度条=IFS(C2=0%,"未开始",C2=-1%,"有阻塞",C2<100%,"进行中",C2=100%,"已完成") 2、自动计算空单元格个数统计B4到B64中间有空单元格的个数=COUNTBLANK(B4:B63)3、勾选☑️行自动整行文本加删除线4、多条件统计个数=(SUMIFS(E4:E63,A4:A63,0)-SUMIFS(E4:E......
  • MathType数学公式编写技巧分享
    在使用WORD,PPT,WPS,VISIO等制作文档时,经常需要用特殊符号,特别是理工科的学生在写论文时会用到大量的公式。这时候一个拥有大量特殊符号的软件,就显得举足轻重。在市面上有很多这样的软件如:Maple、Mathematica、Word及Mathtype等,其中Mathtype因其“所见即所得”的模式以及其强大的功能......