POJ 2888 Magic Bracelet ——Burnside引理
【题目分析】
同样是Burnside引理。但是有几种颜色是不能放在一起的。
所以DP就好了。
然后T掉
所以矩阵乘法就好了。
然后T掉
所以取模取的少一些,矩阵乘法里的取模尤其要注意,就可以了。
A掉
【代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define maxn 11
#define ll long long
#define inf 0x3f3f3f3f
#define maxm 100005
const int md=9973; int T,n,m,k,ni,ispr[maxm],pr[maxm],top=0,sum; struct Matrix{
int x[maxn][maxn];
void init(){memset(x,0,sizeof x);}
void clear(){F(i,1,m)F(j,1,m)x[i][j]=1;}
void print()
{
F(i,1,m)
{
F(j,1,m) printf("%d ",x[i][j]);
printf("\n");
}
}
}A,B,C,D; Matrix operator * (const Matrix a,const Matrix b) {
Matrix c;
for (int i=1;i<maxn;++i)
for (int j=1;j<maxn;++j)
{
c.x[i][j]=0;
for (int k=1;k<maxn;++k)
c.x[i][j]+=a.x[i][k]*b.x[k][j];
c.x[i][j]%=md;
}
return c;
} void init()
{
F(i,2,maxm-1)
{
if (!ispr[i]) pr[++top]=i;
F(j,2,inf)
{
if (i*j>=maxm) break;
ispr[i*j]=1;
}
}
} int qpow(int a,int b)
{
int ret=1;a%=md;
while (b)
{
if (b&1) (ret*=a)%=md;
(a*=a)%=md;
b>>=1;
}
return ret;
} int phi(int n)
{
int ret=n;
for (int i=1;pr[i]*pr[i]<=n&&i<=top;++i)
if (n%pr[i]==0)
{
ret=ret-ret/pr[i];
while (n%pr[i]==0) n/=pr[i];
}
if (n>1) ret=ret-ret/n;
return ret%md;
} int tak(int b)
{
int ret=0;
D.init();F(i,1,m)D.x[i][i]=1;
C=B;
while (b)
{
if (b&1) D=D*C;
C=C*C;
b>>=1;
}
F(i,1,m) ret+=D.x[i][i];
return ret;
} int main()
{
init();
scanf("%d",&T);
while (T--)
{
sum=0;
scanf("%d%d%d",&n,&m,&k);
ni=qpow(n,md-2);
B.init();
B.clear();
F(i,1,k)
{
int a,b;
scanf("%d%d",&a,&b);
B.x[a][b]=B.x[b][a]=0;
}
for (int i=1;(ll)i*(ll)i<=(ll)n;++i)
{
if (n%i==0)
{
sum=(sum+tak(i)*phi(n/i))%md;
if (i*i!=n)
sum=(sum+tak(n/i)*phi(i))%md;
}
}
printf("%d\n",(sum*ni)%md);
}
}
POJ 2888 Magic Bracelet ——Burnside引理的更多相关文章
- poj 2888 Magic Bracelet(Polya+矩阵快速幂)
Magic Bracelet Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 4990 Accepted: 1610 D ...
- POJ 2888 Magic Bracelet(Burnside引理,矩阵优化)
Magic Bracelet Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 3731 Accepted: 1227 D ...
- 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法
[POJ2888]Magic Bracelet 题意:一个长度为n的项链,有m种颜色的珠子,有k个限制(a,b)表示颜色为a的珠子和颜色为b的珠子不能相邻,求用m种珠子能串成的项链有多少种.如果一个项 ...
- 解题:POJ 2888 Magic Bracelet
题面 这题虽然很老了但是挺好的 仍然套Burnside引理(因为有限制你并不能套Polya定理),思路和这个题一样,问题主要是如何求方案. 思路是把放珠子的方案看成一张图,然后就巧妙的变成了一个经典的 ...
- POJ 2888 Magic Bracelet(burnside引理+矩阵)
题意:一个长度为n的项链,m种颜色染色每个珠子.一些限制给出有些颜色珠子不能相邻.旋转后相同视为相同.有多少种不同的项链? 思路:这题有点综合,首先,我们对于每个n的因数i,都考虑这个因数i下的不变置 ...
- [POJ 2888]Magic Bracelet[Polya Burnside 置换 矩阵]
也许更好的阅读体验 \(\mathcal{Description}\) 大意:给一条长度为\(n\)的项链,有\(m\)种颜色,另有\(k\)条限制,每条限制为不允许\(x,y\)颜色连在一起.要求有 ...
- poj 2888 Magic Bracelet <polya定理>
题目:http://poj.org/problem?id=2888 题意:给定n(n <= 10^9)颗珠子,组成一串项链,每颗珠子可以用m种颜色中一种来涂色,如果两种涂色方法通过旋转项链可以得 ...
- poj 2888 Magic Bracelet
经典的有限制条件的Burnside计数+矩阵乘法!!! 对于这种限制条件的情况我们可以通过矩阵连乘得到,先初始化矩阵array[i][j]为1.如果颜色a和颜色b不能涂在相邻的珠子, 那么array[ ...
- POJ 2888 Magic Bracelet [Polya 矩阵乘法]
传送门 题意:竟然扯到哈利波特了.... 和上一题差不多,但颜色数很少,给出不能相邻的颜色对 可以相邻的连边建图矩阵乘法求回路个数就得到$f(i)$了.... 感觉这样的环上有限制问题挺套路的...旋 ...
随机推荐
- 字符串、String等转换
(1) String 转换为字符串 例:String s = "abcde";char[] a = s.toCharArray(); (2) 字符串转换为Stringchar[] ...
- HDinsight 系列-使用证书登陆中国区Azure
使用azure explorer 插件的时候,登陆默认是globle的azure网站,中国区的azure不能直接使用 可以使用auth文件认证 auth 文件生成 az cloud show -o j ...
- Servlet The Filter
The Filter Filter不会产生Request或者是Response, 但是会在两者访问资源时, 对其作出改变.其可以作用于静态资源和动态资源. LifeCycle Filter会和Serv ...
- Heacher互助平台 α版本冲刺
课程属性 作业课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 作业链接 https://edu.cnblogs.co ...
- softmax_loss的归一化问题
cnn网络中,网络更新一次参数是根据loss反向传播来,这个loss是一个batch_size的图像前向传播得到的loss和除以batch_size大小得到的平均loss. softmax_loss前 ...
- caffe实现多label输入(修改源码版)
http://blog.csdn.net/u013010889/article/details/54614067 这个人的博客本身也相当好
- 公共Service的抽取小例
package cn.sxx.service; import java.util.List; public interface BaseService<T,Q> { public void ...
- 电商技术中企业数据总线ESB和注册服务管理的区别
一.概述 1.什么是ESB 就是企业数据总线的意思,他的核心功能就是兼容各种协议接口,可以将数据在各种协议之间进行流转,并且可以针对数据格式进行编排转换. 异构系统,功能繁多,复杂 代表性的项目有:J ...
- POJ 3080 Blue Jeans、POJ 3461 Oulipo——KMP应用
题目:POJ3080 http://poj.org/problem?id=3080 题意:对于输入的文本串,输出最长的公共子串,如果长度相同,输出字典序最小的. 这题数据量很小,用暴力也是16ms,用 ...
- Ubuntu apt-get出现unable to locate package解决方案
前言 刚安装好的ubuntu 17发现apt-get安装指令异常. 故经网上搜索调查发现,发现这个问题基本是因为apt-get需要更新的缘故. 解决方案 只需使用命令升级更新即可. sudo apt- ...