SYT的水题选讲1

Posted icantfindaname

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SYT的水题选讲1相关的知识,希望对你有一定的参考价值。

题意

定义一个排列(A)权值(f(A)=min(i),A^i=I,iin N^+),其中(A^i)表示转置快速幂,I表示单位排列。例如,(f({1,2,3,4,5})=1,f({2,3,1,5,4})=6).

给定(n),对于所有长度为(n)的排列(A),求(prod f(A)operatorname{mod}P).

(Nle 7500),(Pin[10^8,10^9+7])且是质数

source :[USACO20OPEN]Exercise P

题解

一个排列的权值,相当于这个排列所成的环大小的LCM

最后要输出(prod),所以我们考虑统计答案中每个质数的指数。由于欧拉定理,我们只需要对指数模(P-1)就可以。

有一个常见套路,考虑枚举(p^i),如果我们发现某个排列的权值是(p^i)的倍数,则给(p)的指数增添一点贡献。

现在有2种DP的做法

  • 暴力DP

枚举(p^i),令(f_{i,1/0})表示长度为(i)的排列,权值是/否(p^i)倍数的方案数,我们枚举1号点所在的排列长度,有

[f_n=sum_{i}C_{n-1}^{i-1}(i-1)!f_{n-i} ]

转移系数我们认为是钦定1号点包含于一个排列(第二维略,请自行补充)

(O(n^3)),过不了。

  • 巧妙的DP

对于每一个质数,我们求的是

[sum_Pmax(fac(len_i)) ]

(fac)表示其中包含(p)质因子的个数,(len_i)表示循环圈的长度。

套一层min-max容斥

[sum_isum_Psum_{Ssubseteq P}(-1)^{|S|+1}prod[fac(len_i)ge i] ]

枚举(i)(p)。我们需要求出,有多少个子集,他们的每一个(p^i|len_i),最后乘一个容斥系数,再乘这个子集出现的次数。

(t=p^i)。我们考虑(dp_n)表示长度为(nt)的权值,我们有

[dp_i=-sum_jdp_{i-j}C_{it-1}^{jt-1}(jt-1)! ]

转移系数带个负号是因为容斥系数导致的。注意为了凑形式(dp_0=-1).

最终答案下,(p)的指数的贡献是

(sum dp_iC_{n}^{it}(n-it)!)

考虑一个子集出现了多少次。

每次DP的复杂度是(O(frac{n^2}{i^2})).由于(sum_{i=1}^infin frac{1}{i^2})收敛,所以总复杂度(O(n^2))

代码

以上是关于SYT的水题选讲1的主要内容,如果未能解决你的问题,请参考以下文章

5.30杂题选讲

11.28杂题选讲

正睿OI DAY3 杂题选讲

杂题选讲1

20190915杂题选讲

[做题笔记] pb大师的杂题选讲