容斥练习

线性求阶乘逆元

int fac[N], ifac[N]
void init() {
	fac[0]=1;
	REP(i,1,N-1) fac[i]=(ll)fac[i-1]*i%P;
	ifac[N-1] = qpow(fac[N-1],P-2);
	PER(i,1,N-1) ifac[i-1]=(ll)ifac[i]*i%P;
}

1. n*n棋盘, n<=1e6, 三种颜色, 每个格子必须染成其中一种, 求至少有一行或一列同色的方案数 (CF 998E)

设$f(i,j)$为至少$i$行且至少$j$列同色的方案数. 只限制行或列的情况下, 每行或每列颜色颜色可以不同, 否则的话因为有交叉, 整个连通块必须同色, 可以得到

$$f(i,j) =   \begin{cases} 3^{n(n-i-j)+i+j},  & \text{$i=0$或$j=0$} \\ 3^{(n-i)(n-j)+1}, & \text{其它} \end{cases}$$

由容斥可以得到$ans=\sum\limits_{\substack{1\le i\le n \\ 1\le j \le n}}(-1)^{i+j-1}\binom{n}{i}\binom{n}{j}f(i,j)$

对于$i=0$或$j=0$的情况直接$O(n)$即可求出, 考虑$i>0$且$j>0$的情况, 有

$\begin{align}\notag ans & =\sum\limits_{\substack{1\le i\le n \\ 1\le j \le n}}(-1)^{i+j-1}\binom{n}{i}\binom{n}{j}3^{(n-i)(n-j)+1} \\ & =  \sum\limits_{i=1}^n\Bigg((-1)^{i+1}\binom{n}{i}3^{n^2-ni+1}\sum\limits_{j=1}^n(-1)^j\binom{n}{j}3^{(i-n)j}\Bigg) \notag \\ & = \sum\limits_{i=1}^n\Bigg((-1)^{i+1}\binom{n}{i}3^{n^2-ni+1}((1-3^{i-n})^n-1)\Bigg)\notag \end{align}$

可以线性求出.

猜你喜欢

转载自www.cnblogs.com/uid001/p/10929163.html