CF1630E(Polya 定理)
将问题拆成两个部分:求出解的数量和解的权值之和。
对于前者,运用 Polya 定理,假设环长为 \(d\),环个数为 \(c=\dfrac{n}{d}\),那么有答案 \(f_d=\dbinom{c}{\frac{b_1}{d},\frac{b_2}{d},\cdots, \frac{b_n}{d}}\),其中 \(b_i\) 表示 \(i\) 在 \(a\) 中出现次数。
考虑优化求解,显然 \(d\) 需要满足 \(d|n\land d|b_i\)。考虑把 \(\prod\limits_{i=1}^n \left(\dfrac{b_i}{d}\right)!\) 这步计算放在值域上面,定义 \(c_i\) 表示 \(i\) 在 \(b\) 中的出现次数,上述值变成了 \(\prod\limits_{d|i}\left(\left(\dfrac{i}{d}\right)!\right)^{c_i}\),容易在调和级数时间内处理。
套用 Polya 的式子,答案就是 \(\dfrac{1}{n}\sum\limits_{i=1}^{n}f_{n/\gcd(i,n)}\)。
对于后者,和前者也差不多,枚举相邻有序对的贡献 \(x,y\),显然有 \(g_d=\dbinom{c-2}{\frac{b_x}{d}-1,\frac{b_y}{d}-1,\cdots}\),优化是简单的。

浙公网安备 33010602011771号