luogu P1446 [HNOI2008]Cards
题目链接
题解
题意就是求染色方案->等价类
洗牌方式构成成了一个置换群
然而,染色数限制不能用polay定理直接求解
考虑burnside引理
对于一个置换群其等价类的个数为置换中不动点的平均数
先暴力求出置换中的轮换,然后01背包DP求出不动点方案数
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using std::__gcd;
#define LL long long
const int maxn = 70;
inline int read() {
char c=getchar();int x=0;
while(c<'0'||c>'9') c=getchar();
while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
return x;
}
int sr,sb,sg,m,p,n,cnt;
bool vis[maxn],size[maxn*maxn];
int col[maxn],f[maxn][maxn][maxn];
inline void find() {//找到该置换中轮换的个数
cnt=0;
memset(vis,0,sizeof vis);
memset(size,0,sizeof col);
for(int i=1;i<=n;++i) {
if(!vis[i]) {
int p=i;cnt++;
while(!vis[p])vis[p]=1,size[cnt]++,p=col[p];
}
}
}
int count() {
memset(f,0,sizeof f);
f[0][0][0]=1;
for(int q=1;q<=cnt;++q)
for(int i=sr;i>=0;--i)
for(int j=sb;j>=0;--j)
for(int k=sg;k>=0;--k) {
if(i>=size[q]) f[i][j][k]=(f[i][j][k]+f[i-size[q]][j][k])%p;
if(j>=size[q]) f[i][j][k]=(f[i][j][k]+f[i][j-size[q]][k])%p;
if(k>=size[q]) f[i][j][k]=(f[i][j][k]+f[i][j][k-size[q]])%p;
}
return f[sr][sb][sg];
}
LL qpow(int x,int q) {
int ret=1;
for(int i=q;i;i>>=1,x=x*x%p)
if(i&1)ret=ret*x%p;
return ret;
}
int main() {
LL ans=0;
sr=read(),sb=read(),sg=read(),m=read(),p=read();
n=sr+sb+sg;
for(int i=1;i<=m;++i) {
for(int j=1;j<=n;++j) {
col[j]=read();
}
find();
ans+=count();
}
//m+1为不动置换
for(int i=1;i<=n;++i) col[i]=i;
find();
ans+=count();
ans=(ans*qpow(m+1,p-2))%p;
std::cout<<ans<<std::endl;
return 0;
}
luogu P1446 [HNOI2008]Cards的更多相关文章
- luogu P1446 [HNOI2008]Cards burnside引理 置换 不动点
LINK:Cards 不太会burnside引理 而这道题则是一个应用. 首先 一个非常舒服的地方是这道题给出了m个本质不同的置换 然后带上单位置换就是m+1个置换. burnside引理: 其中D( ...
- 洛谷 P1446 [HNOI2008]Cards 解题报告
P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...
- 洛谷P1446 [HNOI2008]Cards
置换群+dp #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring& ...
- P1446 [HNOI2008]Cards
题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案. 进一步,小春要求染出Sr张红色,Sb张蓝 ...
- [HNOI2008]Cards(dp,Burnside引理)
Burnside引理: 参考自 某大佬对Burnside引理和Polya定理的讲解 相关概念 群:在数学中,群表示一个拥有满足封闭性.满足结合律.有单位元.有逆元的二元运算的代数结构. 置换群:由有限 ...
- 【bzoj1004】[HNOI2008]Cards
1004: [HNOI2008]Cards Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2928 Solved: 1754[Submit][Sta ...
- bzoj 1004 1004: [HNOI2008]Cards burnside定理
1004: [HNOI2008]Cards Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1668 Solved: 978[Submit][Stat ...
- BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )
题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...
- [luogu P3195] [HNOI2008]玩具装箱TOY
[luogu P3195] [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆, ...
随机推荐
- 小红帽安装centos的yum的一些坑!
[root@localhost ~]# lsanaconda-ks.cfg yum-3.4.3-158.el7.centos.noarch.rpm yum-updateonboot-1.1.31-45 ...
- Python 第一周编程作业
一. 编程题 1. 结合turtle库使用手册,读懂下列代码,并在jupyter编译器中运行观察结果: 依次分析下代码: 第一行 通过保留字import引用了Python中用于绘制图形的turtl ...
- tomcat启动后服务访问404
. 解决办法: 在tomcat文件中有个work文件夹.其中,tomcat属于admin用户,work属于 admin用户 ,启动服务由admin用户启动. 但是发现work文件下的目录权限属于 ...
- Elasticsearch查询优化总结
查询优化 1 从提高查询精确度进行优化: 本部分主要针对全文搜索进行探究. 1.1 倒排索引 1.1.1 什么是倒排索引: 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文 ...
- shell sort 排序大讨论
转自http://roclinux.cn 本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. === [正文开始]有时候学 ...
- BATCH梯度下降,单变量线性回归
- InnoDB 存储引擎的线程与内存池
InnoDB 存储引擎的线程与内存池 InnoDB体系结构如下: 后台线程: 1.后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据: 2.另外,将以修改的数据文件刷 ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- 禅与园林艺术(garden)
禅与园林艺术(garden) 上了大学之后,小W和小Z一起报了一门水课,在做作业时遇到了问题. 有一个长度为nn的数列{ai},为一列树木的美观值. 现在有mm次询问,每次给出三个数l,r,p 询问对 ...
- 【CF Edu 28 A. Curriculum Vitae】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...