洛谷题面传送门

首先很明显题目暗示我们先求出符合条件的戒指数量,再计算出由这些戒指能够构成的项链的个数,因此考虑分别计算它们。首先是计算符合条件的戒指数量,题目中“可以通过旋转重合的戒指视作相同”可以让我们联想到 Polya 定理,具体来说根据 Polya 那套理论,符合条件的戒指个数就是 \(C=\dfrac{1}{m}\sum\limits_{d\mid n}R^d\varphi(\dfrac{n}{d})\),\(\mathcal O(\sqrt{n})\) 地枚举因子并计算 \(\varphi\) 即可。注意这里 \(m\) 有可能是 \(3214567\) 的倍数,对于这种情况,我们考虑将模数变成 \(3214567^2\),这样计算完之后除以 \(m\) 这一步可以先令乘上 \(\dfrac{m}{3214567}\) 在模 \(3214567^2\) 意义下的逆元,然后答案除以 \(3214567\)(虽然似乎数据没有这样的情况?)

接下来考虑此题的第二部分,如何通过符合条件的戒指数量 \(C\) 计算项链个数,一个很 naive 的想法是 \(C·(C-1)^{n-1}\),不过由于“纪念品两侧戒指不同”这一条件的存在,这个想法是错误的。正确的方法是,设 \(f_i\) 表示长度为 \(i\) 的满足条件的项链个数,我们考虑从纪念品一侧的戒指开始,给 \(i\) 枚戒指分别标号 \(1,2,3,\cdots,i\),那么我们考虑分 \(1\) 和 \(i-1\) 戒指相同 与 \(1\) 和 \(i-1\) 戒指不同这两类进行处理,对于 \(1,i-1\) 戒指不同的情况,如果我们把戒指 \(i\) 拿掉,其余戒指组成了长度为 \(i-1\) 的符合条件的项链,而由于 \(1,i-1\) 戒指不同,第 \(i\) 个戒指的方案数就是 \(C-2\),总方案数 \(f_{i-1}·(C-2)\),对于 \(1,i-1\) 戒指相同的情况,由于 \(i-2,i-1\) 相邻,\(i-2,i-1\) 戒指必定不同,故 \(1,i-2\) 对应的戒指也不同,因此如果我们把 \(i-1,i\) 戒指拿掉,那剩余 \(i-2\) 个戒指还是可以组成长度为 \(i-2\) 的符合条件的项链,这部分的贡献也就是 \(f_{i-2}·(C-1)\)。因此我们可以得到递推式 \(f_i=f_{i-1}·(C-2)+f_{i-2}·(C-1)\),边界条件 \(f_1=0,f_2=C(C-1)\),直接暴力推是 \(\mathcal O(n)\) 的,无法通过,不过很明显对于这样 \(f_i=af_{i-1}+bf_{i-2}\) 的递推式,我们可以通过特征根方程优化,具体来说我们求出 \(x^2=ax+b\) 的两根 \(\alpha,\beta\),那么 \(f_i\) 统统可以表示为 \(A\alpha^i+B\beta^i\) 的形式。此题也不例外,代入 \(a=C-2,b=C-1\) 可得特征根方程两根 \(\alpha=-1,\beta=C-1\),再代入 \(f_1=0,f_2=C(C-1)\) 可得 \(A=(C-1),B=1\),因此 \(f_i=(C-1)(-1)^n+(C-1)^n\)。

u1s1 感觉此题和这题出奇地相似,题解写得也出奇地相似(

ll n,MMOD=MOD;int m,r;
ll getmul(ll x,ll y){return (__int128_t)(1)*x*y%MMOD;}
int qpow(int x,ll e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
ll _qpow(int x,int e){
ll ret=1;
for(;e;e>>=1,x=getmul(x,x)) if(e&1) ret=getmul(ret,x);
return ret;
}
void exgcd(ll x,ll y,ll &a,ll &b){
if(!y) return a=1,b=0,void();exgcd(y,x%y,a,b);
ll tmp=a;a=b;b=tmp-(x/y)*b;
}
ll getinv(ll a,ll mod){
ll x,y;exgcd(a,mod,x,y);
return (x+mod)%mod;
}
int getphi(int x){
int res=x,tmp=x;
for(int i=2;i*i<=x;i++) if(tmp%i==0){
res=res/i*(i-1);
while(tmp%i==0) tmp/=i;
} if(tmp>1) res=res/tmp*(tmp-1);
return res;
}
int main(){
scanf("%lld%d%d",&n,&m,&r);ll ret=0;
bool flg=0;if(m%MOD==0) flg=1,MMOD=1ll*MOD*MOD;
for(int i=1;i*i<=m;i++) if(m%i==0){
ret=(ret+getmul(_qpow(r,i),getphi(m/i)))%MMOD;
if(m/i!=i) ret=(ret+getmul(_qpow(r,m/i),getphi(i)))%MMOD;
} ret=1ll*ret*getinv((flg)?(m/MOD):m,MMOD)%MMOD;
if(flg) ret/=MOD,ret%=MOD;
printf("%d\n",(1ll*(ret-1)*qpow((MOD-1),n)%MOD+qpow(ret-1,n))%MOD);
return 0;
}

洛谷 P5233 - [JSOI2012]爱之项链(Polya 定理+递推)的更多相关文章

  1. [洛谷P4980]【模板】Polya定理

    题目大意:给一个$n$个点的环染色,有$n$中颜色,问有多少种涂色方案是的旋转后本质不同 题解:$burnside$引理:$ans=\dfrac1{|G|}\sum\limits_{g\in G}A_ ...

  2. 【洛谷】P1095 守望者的逃离(递推)

    题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  3. 洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)

    题目大意: 给定一个DAG,求起点到终点的路径长度期望 根据题意可以知道每一条边都有一定概率被走到 那么\(\displaystyle\begin{aligned} Ans = \sum_{e \in ...

  4. 洛谷P3307 [SDOI2013]项链 [polya定理,莫比乌斯反演]

    传送门 思路 很明显的一个思路:先搞出有多少种珠子,再求有多少种项链. 珠子 考虑这个式子: \[ S3=\sum_{i=1}^a \sum_{j=1}^a\sum_{k=1}^a [\gcd(i,j ...

  5. 洛谷——P3807 【模板】卢卡斯定理

    P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...

  6. bzoj4330:JSOI2012 爱之项链

    题目大意:一串项链由n个戒指组成,对于每个戒指,一共有M个点,R种颜色,且旋转后相同的戒指是相同的,然后一串项链又由N个戒指组成,同时要满足相邻的两个戒指不能相同,这串项链上某个位置插入了一个特殊的东 ...

  7. BZOJ1878 洛谷1972 HH的项链题解

    洛谷链接 BZOJ链接 看到这样不用修改的题目,应该佷容易就联想到了离线来处理. 我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置 我们用next[i]表示i处颜色之前 ...

  8. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...

  9. bzoj 4330: JSOI2012 爱之项链

    听说这题不公开.. 那就不贴题意了 首先要用burnside引理求出戒指的种数,那么对于一个顺时针旋转$k$个位置的置换就相当于连上一条$(i,(i+k)%R)$的边,每个环颜色必须相同 环的个数为$ ...

随机推荐

  1. K12教培从业者转型指南 换个赛道依然可以再创辉煌

    随着"双减"政策的落地,属于K12教培机构的时代逐渐拉上帷幕,面对机会不再的K12教培行业,约70万机构和近千万的从业人员面临转型问题.压力之下,留下或离开?对广大K12教培机构从 ...

  2. javascript-jquery-文档处理

    一.移动元素 1.append():向每个匹配元素的内部追加内容.例如:$("选择器1").qppend("选择器2"):将会匹配选择器2的元素,移动到匹配选择 ...

  3. Java:修饰符小记

    Java:修饰符小记 对 Java 中的 修饰符,做一个微不足道的小小小小记 Java 语言提供了很多修饰符,大概分为两类: 访问权限修饰符 非访问权限修饰符 访问权限修饰符 修饰符 说明 publi ...

  4. 算法:杨辉三角(Pascal's Triangle)

    一.杨辉三角介绍 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形.巴斯卡三角形,是二项式系数的一种写法,形似三角形,在中国首现于南宋杨辉的<详解九章算法>得名,书中杨辉说明是引自贾 ...

  5. Spring中自定义Schema扩展机制

    一.前言 Spring 为基于 XML 构建的应用提供了一种扩展机制,用于定义和配置 Bean. 它允许使用者编写自定义的 XML bean 解析器,并将解析器本身以及最终定义的 Bean 集成到 S ...

  6. 架构师之路-redis集群解析

    引子 上篇<架构师之路-https底层原理>里我提到了上面的整体视图,文章也介绍了想要真正能在工作中及时正确解决问题的基本功:原理理解透彻.今天以redis集群解析为例介绍一个及时敏锐的发 ...

  7. linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件

    转载:https://blog.csdn.net/fu6543210/article/details/7984578 将.tgz文件解压在当前目录: tar zxvf MY_NAME.tgz 将.ta ...

  8. DDR3 IP和CIC IP仿真问题解决记录

    1.更新vivado的仿真库(data/secureip和verilog和vhdl文件夹)至最新的vivado库和生成IP的版本匹配: 2.vcs编译脚本里面把仿真库地址指向匹配的仿真库版本: 3.v ...

  9. ReentrantLock & AQS

    概念 Syncronized由于其使用的不灵活性,逐渐的被抛弃~ 常用解决方案,有以下三种使用方式:(暂时的不考虑condition的应用,暂时还没有总结出来) 同步普通方法,锁的是当前对象. 同步静 ...

  10. oracle 归档日志:db_recovery_file_dest、log_archive_dest和log_archive_dest_n的区别和使用

    概念: db_recovery_file_dest:默认的指定闪回恢复区路径 log_archive_dest:指定归档文件存放的路径,所有归档路径必须是本地的,默认为''.log_archive_d ...