写个题解复建一下说话水平

写个题解复建一下说话水平

https://atcoder.jp/contests/abc462/tasks/abc462_g

\(n\) 个有标号球,第 \(i\) 个球颜色为 \(a_i\in[1,n]\),给定 \(\{b_n\}\),求有多少种球的排列 \(\{a'_n\}\) 使得 \(a'_i\ne b_i\)

显然不弱于错排,考虑容斥,需要算钦定 \(k\)\(a'_i=b_i\) 的位置的方案数,

对于一种颜色 \(u\),设 \(\{a_n\}\)\(u\) 出现 \(c_u\) 次,\(\{b_n\}\)\(u\) 出现 \(d_u\) 次,

若钦定了 \(p_u\) 个颜色为 \(u\) 的球,则这些球的排列方案有 \({c_u\choose p_u}{d_u\choose p_u}p_u!\) 种,

考虑所有颜色,则此时钦定方案有 \((n-k)!\prod{c_u\choose p_u}{d_u\choose p_u}p_u!\) 种,

现在只需要对每个 \(k\) 算出所有确定 \(p\) 的方案的贡献之和。

用 OGF 记钦定的个数,则颜色 \(u\) 的方案的 GF 为 \(F_u(x)=\sum\limits_{i\ge 0}{c_u\choose i}{d_u\choose i}i!x^i\)

然后总方案的 GF 为 \(G(x)=\prod F_u(x)\),钦定 \(k\) 个的方案数就是 \(s_k=(n-k)![x^k]G(x)\)

最后容斥一下答案就是 \(\sum\limits_{k=0}^n(-1)^ks_k\)

https://atcoder.jp/contests/abc462/submissions/76754967