BZOJ 1004-Cards(burnside引理)
来源:互联网 发布:雷蛇键盘mac驱动 编辑:程序博客网 时间:2024/06/05 09:58
1004: [HNOI2008]Cards
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3639 Solved: 2179
[Submit][Status][Discuss]
Description
小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有
多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绝色.他又询问有多少种方
案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.
两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗
成另一种.Sun发现这个问题有点难度,决定交给你,答案可能很大,只要求出答案除以P的余数(P为质数).
Input
第一行输入 5 个整数:Sr,Sb,Sg,m,p(m<=60,m+1<p<100)。n=Sr+Sb+Sg。
接下来 m 行,每行描述一种洗牌法,每行有 n 个用空格隔开的整数 X1X2...Xn,恰为 1 到 n 的一个排列,
表示使用这种洗牌法,第 i位变为原来的 Xi位的牌。输入数据保证任意多次洗牌都可用这 m种洗牌法中的一种代
替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。
Output
不同染法除以P的余数
Sample Input
2 3 1
3 1 2
Sample Output
HINT
有2 种本质上不同的染色法RGB 和RBG,使用洗牌法231 一次可得GBR 和BGR,使用洗牌法312 一次 可得BRG
和GRB。
100%数据满足 Max{Sr,Sb,Sg}<=20。
Source
这里用到了burnside引理,不知道的可以自行百度:引理 ,包括置换群:置换群
补充一下群论的知识:
群的定义
定义运算
群的替换定理
子群
由于题目中保证"任意多次洗牌都可用这
结合律显然成立。
题目中还保证了"对每种洗牌法,都存在一种洗牌法使得能回到原状态",逆元也有了。
只剩下一个单位元,我们手动补上。单位元就是不洗牌。
所以所有的洗牌方案构成了一个置换群。于是就可以用
根据
当然,这里的暴力方法不是指指数级的枚举,而是
#include<map>#include<stack>#include<queue>#include<vector>#include<math.h>#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;#define maxn 77int a[maxn],flag[maxn],b[maxn],p,n,m,dp[maxn][maxn][maxn],sr,sb,sg;int pows(int x,int y){int res=1;while(y){if(y%2)res=res*x%p;x=x*x%p;y/=2;}return res;}int work(){int i,j,cnt=0,k,r;memset(dp,0,sizeof(dp));memset(flag,0,sizeof(flag));for(i=1;i<=n;i++){if(flag[i]==0){b[++cnt]=0;for(j=i;flag[j]==0;j=a[j]){flag[j]=1;b[cnt]++;}}}dp[0][0][0]=1;for(i=1;i<=cnt;i++)for(j=sr;j>=0;j--)for(k=sb;k>=0;k--)for(r=sg;r>=0;r--){if(j>=b[i])dp[j][k][r]+=dp[j-b[i]][k][r];if(k>=b[i])dp[j][k][r]+=dp[j][k-b[i]][r];if(r>=b[i])dp[j][k][r]+=dp[j][k][r-b[i]];dp[j][k][r]%=p;} return dp[sr][sb][sg];}int main(void){int i,j,ans=0;scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&p);n=sr+sb+sg;for(i=1;i<=n;i++)a[i]=i;ans+=work();for(i=1;i<=m;i++){for(j=1;j<=n;j++)scanf("%d",&a[j]);ans=(ans+work())%p;}ans=(ans*pows(m+1,p-2))%p;printf("%d\n",ans);return 0;}
- 【bzoj 1004】[HNOI2008]Cards(burnside 引理)
- BZOJ 1004-Cards(burnside引理)
- 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)
- BZOJ 1004 HNOI2008 Cards Burnside引理
- 【BZOJ 1004】 [HNOI2008]Cards 【burnside引理】
- BZOJ 1004 HNOI 2008 Cards Burnside引理
- Burnside引理和Polya定理 & [bzoj 1004] [HNOI2008]Cards:Burnside引理,动态规划
- BZOJ 1004: [HNOI2008]Cards Burnside dp
- 【BZOJ】【P1004】【HNOI2008】【Cards】【题解】【Burnside引理+dp】
- BZOJ 1004 [HNOI2008]Cards 置换+burnside定理+逆元
- [BZOJ1004][HNOI2008]Cards-Burnside引理
- HNOI2008——cards(burnside引理+DP)
- BZOJ1004:[HNOI2008]Cards (Burnside引理+DP+Exgcd)
- 【BZOJ1004】Cards(HNOI2008)-Burnside引理+DP+逆元
- [BZOJ1004][HNOI2008][Burnside引理][DP]Cards
- 【bzoj1004】[HNOI2008]Cards burnside引理+dp
- BZOJ1004 Cards (burnside dp 扩展欧几里德)
- bzoj 1004 组合数学 + burnside引理 + 逆元
- pyocr(tools=Tesseract)
- R语言node.js通信--实战
- hdu 4451 Dressing(容斥)
- AOP中相关术语的理解
- Git Day 1:利用Git由本机向GitHub上传文件
- BZOJ 1004-Cards(burnside引理)
- WebForms UnobtrusiveV…
- ckedict+ckfinder的配置,asp.net…
- MIPS指令集
- 是工作还是读博
- BCM56330系列交换芯片学习心得
- 每年的节假日数据处理
- Team Queue 团体队列(queue运用)
- 深度学习笔记(一)