【bzoj 1004】 Cards 【HNOI2008】
来源:互联网 发布:windows ftp登录命令 编辑:程序博客网 时间:2024/06/11 01:31
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
1 1 1 2 7
2 3 1
3 1 2
2 3 1
3 1 2
Sample Output
2
HINT
有2 种本质上不同的染色法RGB 和RBG,使用洗牌法231 一次可得GBR 和BGR,使用洗牌法312 一次 可得BRG
和GRB。
100%数据满足 Max{Sr,Sb,Sg}<=20。
这道题标解是置换群,但是可以用数学解法,首先算出不经过洗牌的方案数S,显然S=
*
,然后从输入描述中
可以发现任意一种本质不同的方案都只能变为另外m种,由于每种本质不同的方案被计算了m+1次,所以最终结果为S/(m+1),下面是程序:#include<stdio.h>#include<iostream>using namespace std;int z[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59},a[60];void add(int n){int i=0;for(i=0;z[i]*z[i]<=n;i++){while(!(n%z[i])){a[z[i]]++;n/=z[i];}}if(n>1){a[n]++;}}void del(int n){int i=0;for(i=0;z[i]*z[i]<=n;i++){while(!(n%z[i])){a[z[i]]--;n/=z[i];}}if(n>1){a[n]--;}}int pow(int a,int b,int p){int s=1,r=a;while(b){if(b&1){s*=r;s%=p;}r*=r;r%=p;b>>=1;}return s;}int main(){int r,b,g,m,p,i,n,s=1;scanf("%d%d%d%d%d",&r,&b,&g,&m,&p);n=r+b+g;for(i=r+1;i<=n;i++){add(i);}n-=r;for(i=2;i<=n;i++){del(i);}for(i=b+1;i<=n;i++){add(i);}n-=b;for(i=2;i<=n;i++){del(i);}del(m+1);for(i=2;i<=60;i++){s*=pow(i,a[i],p);s%=p;}printf("%d\n",s);return 0;}
阅读全文
0 0
- bzoj 1004: [HNOI2008]Cards
- BZOJ 1004 [HNOI2008]Cards
- BZOJ 1004 [HNOI2008]Cards
- BZOJ 1004 [HNOI2008] Cards
- 【bzoj 1004】 Cards 【HNOI2008】
- 【BZOJ 1004】 [HNOI2008]Cards
- BZOJ 1004 HNOI2008 Cards Burnside引理
- 【置换群】【bzoj 1004】: [HNOI2008]Cards
- 【BZOJ 1004】 [HNOI2008]Cards 【burnside引理】
- BZOJ 1004: [HNOI2008]Cards Polya计数+DP
- HYSBZ/BZOJ 1004 [HNOI2008] Cards - 组合数学
- bzoj 1004: [HNOI2008]Cards(置换)
- 【bzoj 1004】[HNOI2008]Cards(burnside 引理)
- bzoj 1004: [HNOI2008]Cards 置换群+dp
- BZOJ 1004: [HNOI2008]Cards Burnside dp
- BZOJ 1004([HNOI2008]Cards-Polya计数+k背包)
- BZOJ 1004 [HNOI2008]Cards 置换+burnside定理+逆元
- 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)
- python3—3一些常见的细节处理
- IntelliJ IDEA启动Tomcat后,无法访问Tomcat主页
- django入门一(整体流程)
- AOP使用方法
- 第5章 目录配置规范
- 【bzoj 1004】 Cards 【HNOI2008】
- 《陋室铭》《陋妻铭》《微信铭》《交友铭》《老人铭》
- deepmind_lab IOQ3_COMMON_SRCS 及其他5个文件的依赖的东西
- Javascript canvas 拖动鼠标截图
- NIO入门分享
- 线性表的相关介绍
- Kotlin中Application的实例写法
- 字符串的修改
- 评价Logistic回归模型优劣的两个重要参数AIC和BIC