• bzoj1004 Cards


    这我能怎么办 这我只能%了呀

    群论+Burnside定理引理+DP

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define N 110
    using namespace std;
    typedef long long ll;
    int sr,sb,sg,n,m,mod;
    int cir[N][N],v[N],size[N];
    ll f[N][N][N],ans;
    int calc(int x)
    {
        int cnt=0;
        memset(v,0,sizeof(v));
        memset(size,0,sizeof(size));
        for(int i=1;i<=n;i++)
        {
            if(v[i])continue;
            int p=cir[x][i];
            cnt++;
            while(!v[p])v[p]=1,size[cnt]++,p=cir[x][p];
        }
        memset(f,0,sizeof(f));
        f[0][0][0]=1;
        for(int i=1;i<=cnt;i++)
            for(int j=sr;j>=0;j--)
                for(int k=sb;k>=0;k--)
                    for(int l=sg;l>=0;l--)
                    {
                        if(j>=size[i])f[j][k][l]=(f[j][k][l]+f[j-size[i]][k][l])%mod;
                        if(k>=size[i])f[j][k][l]=(f[j][k][l]+f[j][k-size[i]][l])%mod;
                        if(l>=size[i])f[j][k][l]=(f[j][k][l]+f[j][k][l-size[i]])%mod;
                    }
        return f[sr][sb][sg];
    }
    ll quick_my(ll x,int y)
    {
        ll ret=1;
        while(y)
        {
            if(y&1)ret=(ret*x)%mod;
            x=(x*x)%mod;
            y>>=1;
        }
        return ret;
    }
    int main()
    {
        scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&mod);
        n=sr+sb+sg;
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                scanf("%d",&cir[i][j]);
        m++;
        for(int i=1;i<=n;i++)cir[m][i]=i;
        ll ans=0;
        for(int i=1;i<=m;i++)ans=(ans+calc(i))%mod;
        ans=(ans*quick_my(m,mod-2))%mod;
        printf("%lld
    ",ans);
    }
    
    View Code
  • 相关阅读:
    反编译Silverlight项目
    李开复关于创新的五条建议
    Android人脸检测类FaceDetector
    吃火锅如何进行口腔保健
    ListView优化
    番茄工作法
    App Inventor for Android初接触
    QPainter如何自适应大小画图
    Eclipsejava.lang.OutOfMemoryError: PermGen space
    健康小工具——体脂肪率自测
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7844850.html
Copyright © 2020-2023  润新知