线性求阶乘逆元
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}$
可以线性求出.