看黄学长的代码才写出来的,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. c#读取文本文档实践2-计算商品价格

    商品 数量 单价英语 66 100语文 66 80数学 66 100化学 66 40物理 66 60 上面是文本文档中读入的数据. using System; using System.Collect ...

  2. 管理Fragment

    转载原地址:http://blog.csdn.net/harvic880925/article/details/44927375 相关文章: 1.<Fragment详解之一——概述>2.& ...

  3. stm32启动文件 startup_stm32f10x_hd.s

    ;* 文件名          : startup_stm32f10x_hd.s;* 库版本           : V3.5.0;* 说明:             此文件为STM32F10x高密度 ...

  4. Linux下TC使用说明

    Linux下TC使用说明   一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...

  5. NSHTTPCookie类详解

    继承自 NSObject的 符合 NSObject的(NSObject的)  框架 /系统/资源库/框架/ Foundation.framework 可用性 安装使用Safari 1.0在Mac OS ...

  6. Display Images in widget

    在自定义的widget中显示图片. 思路:定义类MyWidget,public 继承自QWidget,然后实现 void paintEvent(QPaintEvent *). 新建Empty qmak ...

  7. Linux 基础入门(新版)(实验一至实验四)

    1.实验一  Lniux简介   操作系统:系统调用+内核 Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺:有全球所有的 Linux ...

  8. cmd命令进行RSA 密钥加密操作

    --参考 http://msdn.microsoft.com/zh-cn/library/2w117ede http://msdn.microsoft.com/zh-cn/library/yxw286 ...

  9. TypeError: The CanvasRenderingContext2D.webkitBackingStorePixelRatio getter can only be used on instances of CanvasRenderingContext2D

    ios10: CanvasRenderingContext2D.prototype.webkitBackingStorePixelRatio 报异常

  10. C# 网络通信基础 总结

    1.WebClient类 如果只是想从特定的URI(统一资源标识符)请求文件,则可以使用最简单的.NET类,System.Net.WebClient.支持http:.https:和file:标识符开头 ...