BZOJ 1004 【HNOI2008】 Cards
题目链接:Cards
听说这道题是染色问题的入门题,于是就去学了一下\(Burnside\)引理和\(P\acute{o}lya\)定理(其实还是没有懂),回来写这道题。
由于题目中保证"任意多次洗牌都可用这\(m\)种洗牌法中的一种代替",于是有了封闭性。
结合律显然成立。
题目中还保证了"对每种洗牌法,都存在一种洗牌法使得能回到原状态",逆元也有了。
只剩下一个单位元,我们手动补上。单位元就是不洗牌。
所以所有的洗牌方案构成了一个置换群。于是就可以用$Burnside$引理了。
这道题由于颜色有数目限制,那么就不能直接上$P\acute{o}lya$定理了。
根据$Burnside$引理,本质不同的染色数目$ans$就是$C(f)$的平均数。于是我们可以暴力算出$C(f)$,由于是在模意义下,所以除法变为逆元。
当然,这里的暴力方法不是指指数级的枚举,而是$dp$。因为一种方案要在一个置换下本质不变,那么在同一个循环内的位置颜色必定相等。于是把所有循环都抠出来然后暴力三维背包就可以了。
下面贴代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define N 61 using namespace std;
typedef long long llg; int Sr,Sb,Sg,m,p,ans;
int nt[N],siz[N],n,f[N][N][N];
bool vis[N]; void gi(int &x){if(x>=p) x%=p;}
int mi(int a,int b){
int s=1;
while(b){
if(b&1) s=s*a,gi(s);
a=a*a,gi(a); b>>=1;
}
return s;
} int work(){
int tol=0;
for(int i=1;i<=n;i++) vis[i]=0;
for(int i=1;i<=n;i++)
if(!vis[i]){
siz[++tol]=0;
for(int j=i;!vis[j];j=nt[j]) vis[j]=1,siz[tol]++;
}
for(int r=0;r<=Sr;r++)
for(int b=0;b<=Sb;b++)
for(int g=0;g<=Sg;g++)
f[r][b][g]=0;
f[0][0][0]=1;
for(int i=1;i<=tol;i++)
for(int r=Sr;r>=0;r--)
for(int b=Sb;b>=0;b--)
for(int g=Sg;g>=0;g--){
if(r>=siz[i]) f[r][b][g]+=f[r-siz[i]][b][g];
if(b>=siz[i]) f[r][b][g]+=f[r][b-siz[i]][g];
if(g>=siz[i]) f[r][b][g]+=f[r][b][g-siz[i]];
gi(f[r][b][g]);
}
return f[Sr][Sb][Sg];
} int main(){
File("a");
scanf("%d %d %d %d %d",&Sr,&Sb,&Sg,&m,&p);
n=Sr+Sb+Sg;
for(int i=1;i<=n;i++) nt[i]=i; ans=work();
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++) scanf("%d",&nt[j]);
ans+=work(); gi(ans);
}
ans*=mi(m+1,p-2); gi(ans);
printf("%d",ans);
return 0;
}
BZOJ 1004 【HNOI2008】 Cards的更多相关文章
- 【BZOJ】【1004】【HNOI2008】Cards
Burnside/Polya+背包DP 这道题目是等价类计数裸题吧……>_> 题解:http://m.blog.csdn.net/blog/njlcazl_11109/8316340 啊其 ...
- 【HNOI2008】Cards BZOJ 1004
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目 前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张 ...
- BZOJ 1006 【HNOI2008】 神奇的国度
题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...
- BZOJ 1009 【HNOI2008】 GT考试
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
- BZOJ 1010 【HNOI2008】 玩具装箱toy
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- 动态规划(斜率优化):BZOJ 1010 【HNOI2008】 玩具装箱
玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8218 Solved: 3233[Submit] Description P 教授要去 ...
- 【BZOJ1004】【HNOI2008】Cards 群论 置换 burnside引理 背包DP
题目描述 有\(n\)张卡牌,要求你给这些卡牌染上RGB三种颜色,\(r\)张红色,\(g\)张绿色,\(b\)张蓝色. 还有\(m\)种洗牌方法,每种洗牌方法是一种置换.保证任意多次洗牌都可用这\( ...
- BZOJ 1854 【Scoi2010】 游戏
Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...
- 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
[BZOJ1010][HNOI2008]玩具装箱 题面 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一 ...
随机推荐
- Android属性动画
这几天看郭神的博客 Android属性动画完全解析(上),初识属性动画的基本用法之后,我自己突然想实现一种动画功能,就是我们在携程网.阿里旅行等等手机APP端买火车票的时候,看到有选择城市,那么就有出 ...
- Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- github常见问题【转自百度知道】
1 git config --global user.name "Your Real Name" 2 git config --global user.email you@emai ...
- Java进击C#——语法之多线程
本章简言 上一章中笔者对C#一些独有的语法点进行讲解,相信也可以看C#的一些神奇之处.那么本章主要是放在多线程这方面的知识.不管是C#还是JAVA在开发过程或多或少都会用到关于多线程的编程.当然笔者不 ...
- Google地图开发总结
我们经常使用地图查位置.看公交.看街景,同时地图还开放第三方的API给开发者.利用这些API进行地图的个性化的展示和控制,例如北京被水淹了,开发一个网页显示北京被淹的地图,地图上面标志被水淹的位置.严 ...
- asp.net MVC 应用程序的生命周期
下面这篇文章总结了 asp.net MVC 框架程序的生命周期.觉得写得不错,故转载一下. 转载自:http://www.cnblogs.com/yplong/p/5582576.html ...
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...
- html+ccs3太阳系行星运转动画
做一个太阳系八大行星的运转动画,不包括行星的卫星,所有行星围绕太阳公转,行星采用纯色,暂时没有自转. 效果静态图: 动画中包括:太阳及各行星,运行轨道,行星公转动画. 先画好草图,设计好大小和位置,根 ...
- Github pages + jekyll 博客快速搭建
Github pages + jekyll 博客快速搭建 寻找喜欢的模版 https://github.com/jekyll/jekyll/wiki/sites http://jekyllthemes ...
- C#开发微信门户及应用(20)-微信企业号的菜单管理
前面几篇陆续介绍了很多微信企业号的相关操作,企业号和公众号一样都可以自定义菜单,因此他们也可以通过API进行菜单的创建.获取列表.删除的操作,因此本篇继续探讨这个主体,介绍企业号的菜单管理操作. 菜单 ...