【SDOI2013 necklace】项链

Description

(JZOJ 3298)
有一个 n 颗珠子组成的项链
每颗珠子有3个面,可以写3个数字,数字的范围 (0,a] ,两颗珠子是相同的当且仅当他们可以通过旋转变成一样
每颗珠子上的三个数的最大公约数必须等于1
相邻两颗珠子必须不同
如果两串项链可以通过旋转变成一样的,我们认为这两串项链相同。
给定 n a ,求有多少不同的项链?答案对 1000000007 取模。

Data Constraint

对于 10 的 数据: n<=10a<=10T<=10
对于 20 的 数据: n<=1000a<=100T<=10
对于 40 的 数据: n<=109a<=100T<=10
对于 60 的 数据: n<=106a<=105T<=10
对于 80 的数据: n<=109a<=105T<=10
对于 100 的 数据: n<=1014a<=107T<=10

Solution

先求珠子种类

有用的只有有序对
123 122 112 111
数字表示大小关系

111只有一种
122 112 算出12然后*2
123 算一下

12:
F[i][A] 表示公约数为 i ,数的取值范围为A的12有序对个数
所求即为 F[1][a]
F[1][a]=C(a,2)ai=1F[i][a]
F[i][a]=aq=1ap=1gcd(p,q)=i
F[i][a]=a/iq=1a/ip=1gcd(p,q)=1
–> F[1][a/i] (也可以根据定义直接得出)

递归求解 记忆化搜索

123

F[i][A] 表示公约数为 i ,数的取值范围为 a 的123有序对个数
所求即为 F[1][a]
F[1][a]=C(a,3)ai=1F[i][a]
F[i][a]=F[1][a/i] //根据定义可得

递归求解 记忆化搜索

综上,我们算出了珠子的种类,假设为 M

接下来是 M 种颜色给一个长度为 N 的环染色,相邻不能同色,问方案数
若旋转该环相同则属于同一种方案

设方案数为 ans
其实旋转就是置换,这些置换构成了一个群,叫做置换群
根据Burnside引理

ans=F(Ci)/|G|

其中 Ci 为某种置换类型【即置换群中的某一个元素】, G 为置换群, |G| 为置换群的大小。
F(Ci) 为该置换下不动点的数量
不动点就是对原问题做一次置换操作后仍不变的点
例如这题就是旋转后还是原来的环 即称为这种旋转的不动点
感性点理解就是相同的方案

我们设 Ci 表示旋转 i 颗珠子
F(Ci)=P(gcd(n,i),M)
P(n,m) 表示 M 种颜色给一个长度为 N 的环染色且相邻颜色不同的方案数(不考虑旋转)

为什么呢?
假设旋转 k
若一颗珠子的位置为 i ,旋转后就是 i+k
(i+pk) 的颜色都必须先相同
考虑哪些位置属于 (i+pk)
(i+pk)
>pkp2n=ji

根据扩展欧几里得算法
方程有整数解的条件当且仅当 (ji)|gcd(k,n)

所以当 j i 不同时, ji 必然不是 gcd(k,n) 的因子
那么所有的i最多只有 gcd(k,n)

也就是说 gcd(k,n) 个连续的珠子就决定了这个环
方案数即为 P(gcd(k,n),M)

接下来我们考虑

F(Ci)=P(gcd(n,i),M)
F(Ci)=d|nCnt(d)P(d,M)
其中
Cnd(d)=ni=1gcd(n,i)=d
Cnd(d)=n/di=1gcd(n/d,i)=1
Cnd(d)=Phi(n/d)

F(Ci)=d|nPhi(n/d)P(d,M)

P(n,m) 怎么求?

P(n,m)=P(n1,m)(m2)+P(n2,m)(m1)
插入 1 颗珠子,只有 m2 种可能
插入 2 颗珠子,先放一颗与原开头相同的,再放另一颗的时候就有 m1 种可能
且两种插入方式必然没重复(一个首尾不同,一个首尾相同)

特征根求解通项公式

P(n,m)=(m1)n+(1)n(m1);

完美得解

你可能感兴趣的:(题解)