HDU7355 Colorings Counting

题意:n 个点的环,每个点染上 m 种颜色中的一种,要求相邻点的颜色不同。若两种方案能通过任意次旋转、翻转、整体 +1m 变为相同,则这两种方案相同。求方案数。n,m1018

先考虑一些式子:n 个点的链,相邻点不同色的方案数 A(n)=m(m1)n1

n 个点的环,相邻点不同色的方案数 B(n)=(m1)n+(1)n(m1),通过解递推式得到。

n 个点的链,第一个不为 1 且最后一个不为 2 的方案数 C(n)=(1)n+1(1m)n+11m

假设下标从 0 开始。对下标的置换为 i(c+i)modni(ci)modn。根据 Burnside,考虑枚举一个置换和整体增量 x,求出此时不变的方案数。

第二种比较简洁,发现构成若干自环和二元环,图画出来比较美观。n 为奇数时,一定存在恰好一个自环,这要求 x=0,然而一定存在由相邻的点构成的二元环,所以答案为 0n 为偶数时,若 c 为偶数,则存在相对的两个自环,答案为 A(n2+1)。若 c 为奇数,全部为二元环,但存在两个由相邻的点构成的二元环,x=m2,答案为 [2|m]A(n2)

考虑第一种,构成了 g=gcd(n,c)个环,环长为 d=ng。要求 dx0(modm)mgcd(m,d)|x0..g 相邻点不同色,其中 aga0+kx(modm)kx0(modm) 时,方案数即为 B(g),否则为 mC(g1)。注意到 k 满足 kcg(modn)kcg1(modd)gcd(k,d)=1kx0(modm) 等价于 kq0(modgcd(m,d)),而 gcd(k,m,d)=1,所以当且仅当 q=x=0。此时答案为 F(g)=mC(g1)[gcd(m,ng)1]+B(g)

第一类的答案为 i=1nF[gcd(i,n)]=d|nF(d)φ(nd)。Pollard-rho 求出质因子后,预处理所有因数和对应的 φ 值即可,单次 O(n14+d(n)logn)

posted @   EverlastingEternity  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示