看黄学长的代码才写出来的,sro_hzwer_orz

原题:

小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有
多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绝色.他又询问有多少种方
案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.
两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗
成另一种.Sun发现这个问题有点难度,决定交给你,答案可能很大,只要求出答案除以P的余数(P为质数).

m<=60,m+1<p<100,Max{Sr,Sb,Sg}<=20。

已经把置换给出来了,要么burnside,要么polya,然而这题颜色有使用限制,所以不能用polya(polya还没理解,这里还不懂)

所以就用burnside:一个置换群的等价计数=(每个置换的置换后等价情况数)/置换总数

置换后的等价情况数就是在置换中没变的数,这个很好写

然后在置换中没变的数要刷的颜色是一样的,只有三种颜色所以就可以搞个三维的01包计数

最后除的内个置换总数因为要膜,所以要用到除法逆元

怎么用呐:

bx mod p=1,x就是b模P的乘法逆元,呢么x≡1/b(mod p),呢么a/b≡ax(mod p),然后用扩展欧几里得求乘法逆元即可(就是解bx mod p=1,某年NOIPT1)

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int sr,sb,sg,n,m,p;
int huan[][];
bool visited[];
int ge[];
int f[][][];
int ans=;
void exgcd(int a,int b,int &x,int &y){
if(!b){ x=,y=; return ;}
exgcd(b,a%b,x,y);
int t=x; x=y; y=t-a/b*y;
}
int dp(int x){
memset(visited,,sizeof(visited));
int cnt=,temp;
for(int i=;i<=n;i++)if(!visited[i]){
visited[i]=true;
ge[++cnt]=; temp=i;
while(!visited[huan[x][temp]]){
ge[cnt]++;
visited[huan[x][temp]]=true;//这里容易蒙……
temp=huan[x][temp];//temp指向了这个连的下一个,再次循环时判断的是下一个的下一个……
}
}
memset(f,,sizeof(f)); f[][][]=;
for(int t=;t<=cnt;t++)
for(int i=sr;i>=;i--)
for(int j=sb;j>=;j--)
for(int k=sg;k>=;k--){
if(i>=ge[t]) f[i][j][k]=(f[i][j][k]+f[i-ge[t]][j][k])%p;
if(j>=ge[t]) f[i][j][k]=(f[i][j][k]+f[i][j-ge[t]][k])%p;
if(k>=ge[t]) f[i][j][k]=(f[i][j][k]+f[i][j][k-ge[t]])%p;
}
return f[sr][sb][sg];
}
int main(){//freopen("ddd.in","r",stdin);
cin>>sr>>sb>>sg>>m>>p;
n=sr+sb+sg;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&huan[i][j]);
m++;
for(int i=;i<=n;i++) huan[m][i]=i;//注意还有不置换的情况
for(int i=;i<=m;i++)
ans=(ans+dp(i))%p;
int x,y;
exgcd(m,p,x,y);
while(x<=)x+=p;
cout<<ans*x%p<<endl;
return ;
}

【BZOJ1004】【HNOI20008】cards的更多相关文章

  1. 【BZOJ1004】Cards(组合数学,Burnside引理)

    [BZOJ1004]Cards(组合数学,Burnside引理) 题面 Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Su ...

  2. 【BZOJ1004】[HNOI2008]Cards Burnside引理

    [BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...

  3. 【SRM 717 div2 B】LexmaxReplace

    Problem Statement Alice has a string s of lowercase letters. The string is written on a wall. Alice ...

  4. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  5. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  6. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  7. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  8. 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...

  9. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  10. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

随机推荐

  1. Android VersionedGestureDetector手势事件

    今天研究了一下PhotoView,发现里面的自定义的手势事件可以支持所有的SDK版本,该事件可以实现拖拽.滑动.缩放功能.下面直接上代码: public abstract class Versione ...

  2. SharePoint 2013 开发——开发自定义操作APP

    博客地址:http://blog.csdn.net/FoxDave 自定义操作即我们所说的Ribbon和ECB(Edit Control Block),在SharePoint 2013之前,我们可以 ...

  3. PHP time() 函数

    定义和用法 time() 函数返回当前时间的 Unix 时间戳. 语法 time(void) 参数 描述 void 可选. 说明 返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 ...

  4. sap 根据TOCE找 USER_EXIT

    *&---------------------------------------------------------------------* *& Report  ZUSER_EX ...

  5. hive 中 union all

    hive 中的union all是不能在sql语句的第一层使用的,否则会报 Top level UNION is not supported currently 错误: 例如如下的方式: select ...

  6. 自动获取UILabel的宽度高度

    在使用UILabel存放字符串时,经常需要获取label的长宽数据,本文列出了部分常用的计算方法. 1.获取宽度,获取字符串不折行单行显示时所需要的长度 CGSize titleSize = [aSt ...

  7. Python的"数组"储存

    import time member=["小甲鱼","小布丁","黑夜","迷途","伊静"] pr ...

  8. Objective-C determine data network type of the iOS device

    Im on an application that receive data from server, the problem is when user connect to cellular dat ...

  9. C#指针转换

    下表显示了预定义的隐式指针转换. 隐式转换可能在多种情形下发生,包括调用方法时和在赋值语句中. 隐式指针转换       From To 任何指针类型 void* null 任何指针类型 显式指针转换 ...

  10. Exploratory Software Testing

    最近找到去年上半年看过一本关于测试方面书籍的总结笔记,一直放在我的个人U盘里,当时是用Xmind记录的,现在重新整理下分享给大家了! James A.Whittaker [美] 詹姆斯·惠特克(软件测 ...