bzoj1004:[HNOI2008]Cards
思路:由于题目给出了置换,又要求本质不同的方案数,考虑使用Burnside引理,Burnside引理即通过所有置换和原来相同的方案数之和除以方案数总数,而对于某一个置换要使置换后得到的与原来的相同,就应该把置换形成的环染成同一种颜色,也就是说属于一个环内的元素颜色一定相同,然后有一定要有一定量的红蓝绿色,因此用一个完全背包去背即可,
f[i][j][k]表示选了i张红色j张蓝色k张绿色的方案数,f[i][j][k]=f[i][j][k]+f[i-sum][j][k]+f[i][j-sum][k]+f[i][j][k-sum](sum表示当前环大小,然后i,j,k一定要判是不是大于sum),最后还有就是任何时候都不要忘了不动也是一个置换,因此有m+1个置换。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 65 int sr,sg,sb,m,p,n,ans,tot;
int a[maxn],next[maxn],vis[maxn],f[][][],sum[maxn]; int calc(){
for (int i=;i<=n;i++) next[i]=a[i];tot=,memset(vis,,sizeof(vis)),memset(f,,sizeof(f)),memset(sum,,sizeof(sum));
for (int i=;i<=n;i++) if (!vis[i]){
int size=;
while (!vis[i]) vis[i]=,size++,i=next[i];
sum[++tot]=size;
}
f[][][]=;
for (int i=;i<=tot;i++)
for (int j=sr;j>=;j--)
for (int k=sg;k>=;k--)
for (int l=sb;l>=;l--){
if (j>=sum[i]) f[j][k][l]=(f[j][k][l]+f[j-sum[i]][k][l])%p;
if (k>=sum[i]) f[j][k][l]=(f[j][k][l]+f[j][k-sum[i]][l])%p;
if (l>=sum[i]) f[j][k][l]=(f[j][k][l]+f[j][k][l-sum[i]])%p;
}
return f[sr][sg][sb];
} int power(int a,int k,int p){
if (k==) return ;
if (k==) return a%p;
int x=power(a,k/,p),ans=x*x%p;
if (k&) ans=ans*a%p;
return ans;
} int main(){
scanf("%d%d%d%d%d",&sr,&sg,&sb,&m,&p),n=sr+sg+sb;
for (int i=;i<=n;i++) a[i]=i;ans=(ans+calc())%p;
for (int i=;i<=m;i++){
for (int j=;j<=n;j++)
scanf("%d",&a[j]);
ans=(ans+calc())%p;
}
ans=ans*power(m+,p-,p)%p;
printf("%d\n",ans);
return ;
}
然后听说这道题有一个玄学写法,答案就是n!/(Sr!*Sg!*Sb!*(m+1)),然而蒟蒻并不知道这是为什么。。。。。神犇求教。。。
bzoj1004:[HNOI2008]Cards的更多相关文章
- 【BZOJ1004】[HNOI2008]Cards Burnside引理
		
[BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...
 - 【bzoj1004】[HNOI2008]Cards
		
1004: [HNOI2008]Cards Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2928 Solved: 1754[Submit][Sta ...
 - 【bzoj1004】 HNOI2008—Cards
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1004 (题目链接) 题意 n张卡片,染成3种颜色,每种颜色只能染固定张数.给出一些洗牌方案,问染色方 ...
 - 【bzoj1004】[HNOI2008]Cards  Burnside引理+背包dp
		
题目描述 用三种颜色染一个长度为 $n=Sr+Sb+Sg$ 序列,要求三种颜色分别有 $Sr,Sb,Sg$ 个.给出 $m$ 个置换,保证这 $m$ 个置换和置换 ${1,2,3,...,n\choo ...
 - bzoj1004 [HNOI2008]Cards 置换群+背包
		
[bzoj1004][HNOI2008]Cards 2014年5月26日5,3502 Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿 ...
 - 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, ...
 - 洛谷 P1446 [HNOI2008]Cards 解题报告
		
P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...
 - 【BZOJ 1004】 1004: [HNOI2008]Cards (置换、burnside引理)
		
1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很 ...
 
随机推荐
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程02:关键帧动画导入与切割》
			
2. 关键帧动画导入与切割 动画的分割与导入概述: 在游戏当中,游戏角色在不同状态下会有不同的动作,这些动作在引擎里相当于一段段的动画片段.当导入模型资源的时候,连同模型动画都会一并导入到引擎中.开发 ...
 - Detect combined string
			
写一个程序判断字符串A是否为其他两个字符串的组合,组合过程中其他两个字符串的相对顺序不能被破坏. 举例说明:abc和def可以组成字符串adebcf,但不能组成aefbcd,因为def的相对顺序已经被 ...
 - Asp.Net的应用程序生命周期概述
			
参考文献: MSDN:Asp.Net应用程序生命周期 博客:选择HttpHandler还是HttpModule? 1.HttpModule 应用程序(HttpApplication)引发的事件可以由实 ...
 - codis集群和redis cluster的优劣对比
			
1.codis架构如下: (1)Codis是一整套缓存解决方案,包含高可用.数据分片.监控.动态扩态 etc..走的是 Apps->代理->redis cluster,一定规模后基本都采用 ...
 - FrankFan7你问我答之一
			
作者:范军 (Frank Fan) 新浪微博:@frankfan7 微信:frankfan7 最近网友留言很多,你既然看得起我问了,我就说说个人浅见.看看就行了,也别认真. Q:你具体工作是什么? ...
 - Android自由行之走进zxing,轻松实现二维码扫描
			
现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. ...
 - ubuntu14.04中安装QuartusII9.1步骤
			
家里的计算机安装了WIN10,出于够用且安装文件小,想安装QuartusII9.1,按M$风格,驱动绝对是安不上的.正好是双系统ubuntu14.04 64位.安装过程不太顺利,记录下来,当作已经不灵 ...
 - webstrom热键[持续更新]
			
1.Ctrl+ Shift + A -- 为了加快寻找菜单命令或工具栏操作,你并不需要看菜单.只有按Ctrl+ Shift + A(说明|查找操作主菜单上),并开始输入动作的名称. . 2.Ctr ...
 - windows下把Apache加入系统服务
			
始 --- 运行,输入cmd,再打开一个命令提示符.分别输入如下命令(每行回车) cd到Apache24\binhttpd.exe-k install-n"servicename" ...
 - android95  缩放加载大图片
			
MainActivity: package com.itheima.loadimage; import android.os.Bundle; import android.app.Activity; ...