码迷,mamicode.com
首页 > 其他好文 > 详细

SYT的水题选讲1

时间:2020-05-08 19:59:51      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:source   class   一个   play   rod   set   次数   质数   形式   

题意

定义一个排列\(A\)权值\(f(A)=\min(i),A^i=I,i\in 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\).

\(N\le 7500\),\(P\in[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_P\max(fac(len_i)) \]

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

套一层min-max容斥

\[\sum_i\sum_P\sum_{S\subseteq 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

标签:source   class   一个   play   rod   set   次数   质数   形式   

原文地址:https://www.cnblogs.com/icantfindaname/p/12852618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!