BZOJ1004: [HNOI2008]Cards
来源:互联网 发布:my sql条件触发器 编辑:程序博客网 时间:2024/05/27 12:21
这道题反映出我群论不是很熟练,理解上有些问题
直接burnside引理,对于一种置换下相同的方案数用DP或记忆化搜索求,然后乘个逆元
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long longusing namespace std;const int maxn = 22;const int maxm = 62;int Mod;int n,m;int a[maxm],n1,n2,n3;int pw(int x,int k){ int r=1,tt=x; for(;k;k>>=1,tt=tt*tt%Mod) if(k&1) r=r*tt%Mod; return r;}int f[2][maxm][maxm][maxm];int N(int x) { return pw(x,Mod-2); }int cir[maxm],cnt;int tp;bool v[maxm];void find_(int x){ if(v[x]) { cir[++cnt]=tp; return ; } tp++; v[x]=true; find_(a[x]);}int main(){ scanf("%d%d%d%d%d",&n1,&n2,&n3,&m,&Mod); n=n1+n2+n3; int re=0; for(int i=1;i<=m+1;i++) { if(i!=m+1) { for(int j=1;j<=n;j++) scanf("%d",&a[j]); cnt = 0; memset(v,false,sizeof v); for(int i=1;i<=n;i++) if(!v[i]) find_(i); } else { for(int j=1;j<=n;j++) cir[j]=1; cnt=n; } int now=1; memset(f[now],0,sizeof f[now]); f[now][n1][n2][n3]=1; for(int j=1;j<=cnt;j++) { now=1^now; memset(f[now],0,sizeof f[now]); for(int x=n1;x>=0;x--) { for(int y=n2;y>=0;y--) for(int l=n3;l>=0;l--) { f[1^now][x][y][l]%=Mod; if(f[1^now][x][y][l]) { int k=f[1^now][x][y][l]; if(x>=cir[j]) f[now][x-cir[j]][y][l]+=k; if(y>=cir[j]) f[now][x][y-cir[j]][l]+=k; if(l>=cir[j]) f[now][x][y][l-cir[j]]+=k; } } } } re+=f[now][0][0][0]; } re%=Mod; re=re*N(m+1)%Mod; printf("%d\n",re); return 0;}
0 0
- BZOJ1004【HNOI2008】Cards
- bzoj1004【hnoi2008】Cards
- bzoj1004: [HNOI2008]Cards
- [BZOJ1004][HNOI2008]Cards
- 【BZOJ1004】【HNOI2008】Cards
- BZOJ1004 [HNOI2008]Cards
- BZOJ1004: [HNOI2008]Cards
- BZOJ1004: [HNOI2008]Cards
- [bzoj1004][HNOI2008]Cards
- bzoj1004[HNOI2008] Cards
- 【HNOI2008】bzoj1004 Cards
- [Polya群论]BZOJ1004: [HNOI2008]Cards
- [BZOJ1004][HNOI2008]Cards-Burnside引理
- [BZOJ1004][HNOI2008][Burnside引理][DP]Cards
- bzoj1004: [HNOI2008]Cards [Burnside&Ploya+求逆元]
- BZOJ1004 [HNOI2008]Cards(置换群+dp)
- kyeremal-bzoj1004-[HNOI2008]-cards-dp+polya
- 【组合数学】[HNOI2008][HYSBZ/BZOJ1004]Cards
- Activity取消注册InputChannel(十二)
- 对话框中的LISTCTRL不能显示CHECKBOX
- hdu2838 Cow Sorting 树状数组
- win10 wifi 时断时续 无internet 安全 解决办法
- PHP 易错知识点整理
- BZOJ1004: [HNOI2008]Cards
- JS中的双向数据绑定及Object.defineProperty方法
- Java基础语法--对变量&运算符的理解
- 解读SAP HANA轻量级应用服务器——XS引擎
- sndPlaySound函数播放声音求指点
- Unity A*算法实现
- Android 圆形按钮实现
- IOS SWIFT CORE DATA 储存,查询,
- poj 1724 ROADS条件限制下的最短路径