题意:n个人,选出几个人(可以为0)做在一张圆桌上,要求在圆桌上坐着的人当中任意两人之间的角度是2π/n的倍数,不包括2π/n.问在旋转同构的意义下有几种坐法.
思路:旋转同构很容易就想到Polay定理和Burnside引理.
Polay定理结论:
L即不同的染色方案,
G是置换群 G={g1,g2,g3,g4,...,gn} ,
gi 的循环节数为 c(gi) ,
m为m种颜色涂染.
Burnside引理:
L相同,G相同
Zk 为k的不动置换类,即G中使K保持不变的置换的全体,
D(aj) 表示在置换 aj 下不变的元素个数. 1<=j<=s ,s=|G|.
这道题可以看做黑色去染n个白色的点,使得相邻两点不为黑色.
设
f(n)
为不考虑旋转同构下的染色方案.
f(1)=1
f(2)=3
f(3)=4
f(4)=7
f(5)=11
推出
f(n)=f(n−1)+f(n−2)
,n是1e9的,直接循环肯定T,所以这里要用到矩阵优化O(logn)算出
f(n)
.
举例模拟
F(n)
与
f(n)
之间的关系.
当
n=4
时,
|G|=n
,
D(g1)=1
(即none的情况,在旋转90的时候是不变的)
D(g2)=3
(即none的情况和正对面坐着两人的两种情况,在旋转180的时候是不变的)
D(g3)=1
(即none的情况,在旋转270的时候是不变的)
D(g4)=7
(即
f(4)
,在不考虑旋转同构的所有情况下旋转360都是不变的)
由此可以看出
D(gi)=f(gcd(n,i))
,
当然这只是举某一个例子,希望有大神能理论帮助理解解释一下.
所以考虑旋转同构,
F(n)=1n⋅∑ni=1f(gcd(n,i))
直接枚举n也肯定不行,看到gcd要多想想欧拉函数.
转化成即
F(n)=1n⋅∑d|nf(d)⋅ϕ(nd)
还需要特判
n==1
时
代码链接:https://github.com/PhyCoe/ACM-Training/blob/master/Code/hdu5868.cpp
以上也是参考题解https://async.icpc-camp.org/d/546-2016理解着写的,若有错误还望请各位大神指出,谢谢.