还是有点没搞懂置换群这玩意儿……
根据题目的保证我们可以知道所有的洗牌构成了一个置换群,这个置换群的大小为\(m+1\)(包括原置换) 然后总的状态数为\(C(a+b+c,a)*C(b+c,c)*C(c,c)\),即\(\frac{(a+b+c)!}{a!b!c!}\) 然后感性理解一下发现对于只有原置换有不动点…… 然后根据burnside引理答案就是\(\frac{(a+b+c)!}{a!b!c!(m+1)}\)//minamoto#include#define fp(i,a,b) for(register int i=a,I=b+1;i I;--i)using namespace std;const int N=105;int a,b,c,m,p,fac[N],inv;int ksm(int a,int b){ int res=1; for(;b;b>>=1,a=1ll*a*a%p)if(b&1)res=1ll*res*a%p; return res;}int main(){// freopen("testdata.in","r",stdin); scanf("%d%d%d%d%d",&a,&b,&c,&m,&p); fac[0]=1;fp(i,1,N-2)fac[i]=1ll*fac[i-1]*i%p; inv=ksm(1ll*fac[a]*fac[b]%p*fac[c]%p*(m+1)%p,p-2); printf("%d\n",1ll*fac[a+b+c]*inv%p);}