题面

先往上套Burnside引理

既然要求没有$\frac{2*π}{n}$的角,也就是说两个人不能挨着,那么相当于给一个环黑白染色,两个相邻的点不能染白色,同时求方案数。考虑$n$个置换子群,即向一边旋转i(1<=i<=n)个单位,那么每个置换子群下循环节的长度是$lcm(i,n)/i$,那循环节数目就是$n/(lcm(i,n)/i)=gcd(i,n)$,然后式子就出来了,设$p(i)$是给长度为$i$的环染色的方案

$ans=\frac{\sum\limits_{i=1}^np(gcd(i,n))}{n}$

如果我们能快速算$p$那么枚举$d=gcd(i,n)$即可,现在考虑如何算$p$,不妨先设$dp[i][0/1]$表示染了长度为$i$的环,两边白色的点的数目为$0/1$的方案数,转移显然

$dp[i][0]=dp[i-1][0]+dp[i-1][1],dp[i][1]=dp[i-1][0]$

可见$dp[i][0]$就是$i-1$的答案,$dp[i][1]$就是$dp[i-1][0]$也就是$i-2$的答案,所以$p[i]=p[i-1]+p[i-2]$,矩乘即可

注意$n=1$“两边”都是可以染白色的,判掉

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=1e9+;
struct a
{
int mat[][];
void Clean()
{
memset(mat,,sizeof mat);
}
void Init1()
{
Clean();
mat[][]=,mat[][]=;
}
void Init2()
{
Clean();
mat[][]=mat[][]=mat[][]=;
}
};
a Matime(a x,a y)
{
a ret; ret.Clean();
for(int i=;i<;i++)
for(int k=;k<;k++)
for(int j=;j<;j++)
ret.mat[i][j]+=1ll*x.mat[i][k]*y.mat[k][j]%mod,ret.mat[i][j]%=mod;
return ret;
}
a Maqpow(a x,int k)
{
if(k==) return x;
a tmp=Maqpow(x,k/);
return k%?Matime(x,Matime(tmp,tmp)):Matime(tmp,tmp);
}
int Calc(int x)
{
if(x==) return ;
if(x==) return ;
a fir,cal; fir.Init1(),cal.Init2();
cal=Maqpow(cal,x-),fir=Matime(fir,cal);
return fir.mat[][];
}
int Phi(int x)
{
int ret=x;
for(int i=;i*i<=x;i++)
if(x%i==)
{
ret/=i,ret*=i-;
while(x%i==) x/=i;
}
if(x!=) ret/=x,ret*=x-;
return ret;
}
void exGCD(int a,int b,int &x,int &y)
{
if(!b) x=,y=;
else exGCD(b,a%b,y,x),y-=a/b*x;
}
int Inv(int x)
{
int xx,yy;
exGCD(x,mod,xx,yy);
return (xx%mod+mod)%mod;
}
int Solve(int x)
{
if(x==) return ;
int ret=;
for(int i=;i*i<=x;i++)
if(x%i==)
{
ret+=1ll*Phi(x/i)*Calc(i)%mod,ret%=mod;
if(i*i!=x) ret+=1ll*Phi(i)*Calc(x/i)%mod,ret%=mod;
}
return 1ll*ret*Inv(x)%mod;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
printf("%d\n",Solve(n));
return ;
}

解题:HDU 5868 Different Circle Permutation的更多相关文章

  1. HDU 5868 Different Circle Permutation(burnside 引理)

    HDU 5868 Different Circle Permutation(burnside 引理) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=586 ...

  2. hdu 5868:Different Circle Permutation 【Polya计数】

    似乎是比较基础的一道用到polya定理的题,为了这道题扣了半天组合数学和数论. 等价的题意:可以当成是给正n边形的顶点染色,旋转同构,两种颜色,假设是红蓝,相邻顶点不能同时为蓝. 大概思路:在不考虑旋 ...

  3. HDU 5868 Different Circle Permutation

    公式,矩阵快速幂,欧拉函数,乘法逆元. $an{s_n} = \frac{1}{n}\sum\limits_{d|n} {\left[ {phi(\frac{n}{d})×\left( {fib(d ...

  4. HDU 5868 Different Circle Permutation Burnside引理+矩阵快速幂+逆元

    题意:有N个座位,人可以选座位,但选的座位不能相邻,且旋转不同构的坐法有几种.如4个座位有3种做法.\( 1≤N≤1000000000 (10^9) \). 题解:首先考虑座位不相邻的选法问题,如果不 ...

  5. hdu 5868 Polya计数

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  6. hdu 5225 Tom and permutation(回溯)

    题目链接:hdu 5225 Tom and permutation #include <cstdio> #include <cstring> #include <algo ...

  7. hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  8. hdu_5868:Different Circle Permutation

    似乎是比较基础的一道用到polya定理的题,为了这道题扣了半天组合数学和数论. 等价的题意:可以当成是给正n边形的顶点染色,旋转同构,两种颜色,假设是红蓝,相邻顶点不能同时为蓝. 大概思路:在不考虑旋 ...

  9. HDU - 6446 Tree and Permutation

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6446 本题是一个树上的问题——DFS. 一棵N个结点的树,其结点为1~N.树具有N-1条边,每一条边具有 ...

随机推荐

  1. Microsoft Tech Summit 2017

    Microsoft Tech Summit 2017 时间:2017.10.31-2017.11.3 地点:北京国际饭店会议中心

  2. 大数据入门第二十一天——scala入门(二)并发编程Akka

    一.概述 1.什么是akka Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 更多入门的基 ...

  3. Educational Codeforces Round 41 (Rated for Div. 2)(A~D)

    由于之前打过了这场比赛的E题,而后面两道题太难,所以就手速半个多小时A了前4题. 就当练手速吧,不过今天除了C题数组开小了以外都是1A A Tetris 题意的抽象解释可以在Luogu里看一下(话说现 ...

  4. [转载]windows下PHP + Nginx curl访问本地地址超时卡死问题的解决方案

    原因: windows 下 nginx+php环境,不支持并发. 解决方案: 1.在配置nginx vhost时,需要同时运行的网站设置不同的fastcgi_pass的端口号 server { ser ...

  5. 初级字典树查找在 Emoji、关键字检索上的运用 Part-3

    系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 生产实践 我们最终要解决 Emoji 在浏览器和打印物上的显示一致. 进行了多番对比,,在显示效果和精度上,m ...

  6. 记录:将图片数据生成 tfrecords 文件并在训练使用时读取

    直接用别人的就行了: https://github.com/myCVs/GenTFRecords

  7. dijkstra算法计算最短路径和并输出最短路径

    void dijisitela(int d, int m1) { ], book[], path[], u, v, min; l = ; ; i < n1; i++) { dis[i] = w[ ...

  8. Android Studio发布Release版本之坑--Unknown host 'd29vzk4ow07wi7.cloudfront.net'

    使用Android Studio发布Release版本时,出现Unknown host 'd29vzk4ow07wi7.cloudfront.net'...错误. 解决方法:修改本机的DNS为8.8. ...

  9. vue入门全局配置

    全局配置 Vue.config 是一个对象,包含 Vue 的全局配置.可以在启动应用之前修改下列属性: silent 类型:boolean 默认值:false 用法: Vue.config.silen ...

  10. Hadoop 4 MapReduce

    对单词个数统计的MapReduce的案例 Mapper类: package main.java.worldClient; import java.io.IOException; import org. ...