zoukankan      html  css  js  c++  java
  • 牛客2020跨年场 D-衔尾蛇 组合数/polya定理

    传送门

    光、对立和小红三个人在玩捉蛇游戏。
    已知蛇有三种:红蛇、蓝蛇和绿蛇。蛇可以咬住自己的尾巴,形成衔尾蛇。每条蛇可以咬住自己的尾巴,也可以咬住别的蛇的尾巴。
    一共有a条红蛇,b条蓝蛇,c条绿蛇。她们想知道一共可以形成多少种不同的衔尾蛇的环?

    注:蛇可以不用全部用完。

    题解:

    觉得应该是polya定理,但是没推出来公式...等一波官方正解

    因为范围只有12,所以赛时的解法是预处理打表,对于蛇数量的每一种组合,枚举出全排列,然后对每个排列,暴力计算它的轮换有多少种,都加进答案里,最后把答案除以蛇总数。

    #include<iostream>
    #define LL long long
    using namespace std;
    int ans[13][13][13];
    int main(){
        ans[0][0][1]=1;
        ans[0][0][2]=1;
        ans[0][0][3]=1;
        ans[0][0][4]=1;
        ans[0][0][5]=1;
        ans[0][0][6]=1;
        ans[0][0][7]=1;
        ans[0][0][8]=1;
        ans[0][0][9]=1;
        ans[0][0][10]=1;
        ans[0][0][11]=1;
        ans[0][0][12]=1;
        ans[0][1][0]=1;
        ans[0][1][1]=1;
        ans[0][1][2]=1;
        ans[0][1][3]=1;
        ans[0][1][4]=1;
        ans[0][1][5]=1;
        ans[0][1][6]=1;
        ans[0][1][7]=1;
        ans[0][1][8]=1;
        ans[0][1][9]=1;
        ans[0][1][10]=1;
        ans[0][1][11]=1;
        ans[0][2][0]=1;
        ans[0][2][1]=1;
        ans[0][2][2]=2;
        ans[0][2][3]=2;
        ans[0][2][4]=3;
        ans[0][2][5]=3;
        ans[0][2][6]=4;
        ans[0][2][7]=4;
        ans[0][2][8]=5;
        ans[0][2][9]=5;
        ans[0][2][10]=6;
        ans[0][3][0]=1;
        ans[0][3][1]=1;
        ans[0][3][2]=2;
        ans[0][3][3]=4;
        ans[0][3][4]=5;
        ans[0][3][5]=7;
        ans[0][3][6]=10;
        ans[0][3][7]=12;
        ans[0][3][8]=15;
        ans[0][3][9]=19;
        ans[0][4][0]=1;
        ans[0][4][1]=1;
        ans[0][4][2]=3;
        ans[0][4][3]=5;
        ans[0][4][4]=10;
        ans[0][4][5]=14;
        ans[0][4][6]=22;
        ans[0][4][7]=30;
        ans[0][4][8]=43;
        ans[0][5][0]=1;
        ans[0][5][1]=1;
        ans[0][5][2]=3;
        ans[0][5][3]=7;
        ans[0][5][4]=14;
        ans[0][5][5]=26;
        ans[0][5][6]=42;
        ans[0][5][7]=66;
        ans[0][6][0]=1;
        ans[0][6][1]=1;
        ans[0][6][2]=4;
        ans[0][6][3]=10;
        ans[0][6][4]=22;
        ans[0][6][5]=42;
        ans[0][6][6]=80;
        ans[0][7][0]=1;
        ans[0][7][1]=1;
        ans[0][7][2]=4;
        ans[0][7][3]=12;
        ans[0][7][4]=30;
        ans[0][7][5]=66;
        ans[0][8][0]=1;
        ans[0][8][1]=1;
        ans[0][8][2]=5;
        ans[0][8][3]=15;
        ans[0][8][4]=43;
        ans[0][9][0]=1;
        ans[0][9][1]=1;
        ans[0][9][2]=5;
        ans[0][9][3]=19;
        ans[0][10][0]=1;
        ans[0][10][1]=1;
        ans[0][10][2]=6;
        ans[0][11][0]=1;
        ans[0][11][1]=1;
        ans[0][12][0]=1;
        ans[1][0][0]=1;
        ans[1][0][1]=1;
        ans[1][0][2]=1;
        ans[1][0][3]=1;
        ans[1][0][4]=1;
        ans[1][0][5]=1;
        ans[1][0][6]=1;
        ans[1][0][7]=1;
        ans[1][0][8]=1;
        ans[1][0][9]=1;
        ans[1][0][10]=1;
        ans[1][0][11]=1;
        ans[1][1][0]=1;
        ans[1][1][1]=2;
        ans[1][1][2]=3;
        ans[1][1][3]=4;
        ans[1][1][4]=5;
        ans[1][1][5]=6;
        ans[1][1][6]=7;
        ans[1][1][7]=8;
        ans[1][1][8]=9;
        ans[1][1][9]=10;
        ans[1][1][10]=11;
        ans[1][2][0]=1;
        ans[1][2][1]=3;
        ans[1][2][2]=6;
        ans[1][2][3]=10;
        ans[1][2][4]=15;
        ans[1][2][5]=21;
        ans[1][2][6]=28;
        ans[1][2][7]=36;
        ans[1][2][8]=45;
        ans[1][2][9]=55;
        ans[1][3][0]=1;
        ans[1][3][1]=4;
        ans[1][3][2]=10;
        ans[1][3][3]=20;
        ans[1][3][4]=35;
        ans[1][3][5]=56;
        ans[1][3][6]=84;
        ans[1][3][7]=120;
        ans[1][3][8]=165;
        ans[1][4][0]=1;
        ans[1][4][1]=5;
        ans[1][4][2]=15;
        ans[1][4][3]=35;
        ans[1][4][4]=70;
        ans[1][4][5]=126;
        ans[1][4][6]=210;
        ans[1][4][7]=330;
        ans[1][5][0]=1;
        ans[1][5][1]=6;
        ans[1][5][2]=21;
        ans[1][5][3]=56;
        ans[1][5][4]=126;
        ans[1][5][5]=252;
        ans[1][5][6]=462;
        ans[1][6][0]=1;
        ans[1][6][1]=7;
        ans[1][6][2]=28;
        ans[1][6][3]=84;
        ans[1][6][4]=210;
        ans[1][6][5]=462;
        ans[1][7][0]=1;
        ans[1][7][1]=8;
        ans[1][7][2]=36;
        ans[1][7][3]=120;
        ans[1][7][4]=330;
        ans[1][8][0]=1;
        ans[1][8][1]=9;
        ans[1][8][2]=45;
        ans[1][8][3]=165;
        ans[1][9][0]=1;
        ans[1][9][1]=10;
        ans[1][9][2]=55;
        ans[1][10][0]=1;
        ans[1][10][1]=11;
        ans[1][11][0]=1;
        ans[2][0][0]=1;
        ans[2][0][1]=1;
        ans[2][0][2]=2;
        ans[2][0][3]=2;
        ans[2][0][4]=3;
        ans[2][0][5]=3;
        ans[2][0][6]=4;
        ans[2][0][7]=4;
        ans[2][0][8]=5;
        ans[2][0][9]=5;
        ans[2][0][10]=6;
        ans[2][1][0]=1;
        ans[2][1][1]=3;
        ans[2][1][2]=6;
        ans[2][1][3]=10;
        ans[2][1][4]=15;
        ans[2][1][5]=21;
        ans[2][1][6]=28;
        ans[2][1][7]=36;
        ans[2][1][8]=45;
        ans[2][1][9]=55;
        ans[2][2][0]=2;
        ans[2][2][1]=6;
        ans[2][2][2]=16;
        ans[2][2][3]=30;
        ans[2][2][4]=54;
        ans[2][2][5]=84;
        ans[2][2][6]=128;
        ans[2][2][7]=180;
        ans[2][2][8]=250;
        ans[2][3][0]=2;
        ans[2][3][1]=10;
        ans[2][3][2]=30;
        ans[2][3][3]=70;
        ans[2][3][4]=140;
        ans[2][3][5]=252;
        ans[2][3][6]=420;
        ans[2][3][7]=660;
        ans[2][4][0]=3;
        ans[2][4][1]=15;
        ans[2][4][2]=54;
        ans[2][4][3]=140;
        ans[2][4][4]=318;
        ans[2][4][5]=630;
        ans[2][4][6]=1160;
        ans[2][5][0]=3;
        ans[2][5][1]=21;
        ans[2][5][2]=84;
        ans[2][5][3]=252;
        ans[2][5][4]=630;
        ans[2][5][5]=1386;
        ans[2][6][0]=4;
        ans[2][6][1]=28;
        ans[2][6][2]=128;
        ans[2][6][3]=420;
        ans[2][6][4]=1160;
        ans[2][7][0]=4;
        ans[2][7][1]=36;
        ans[2][7][2]=180;
        ans[2][7][3]=660;
        ans[2][8][0]=5;
        ans[2][8][1]=45;
        ans[2][8][2]=250;
        ans[2][9][0]=5;
        ans[2][9][1]=55;
        ans[2][10][0]=6;
        ans[3][0][0]=1;
        ans[3][0][1]=1;
        ans[3][0][2]=2;
        ans[3][0][3]=4;
        ans[3][0][4]=5;
        ans[3][0][5]=7;
        ans[3][0][6]=10;
        ans[3][0][7]=12;
        ans[3][0][8]=15;
        ans[3][0][9]=19;
        ans[3][1][0]=1;
        ans[3][1][1]=4;
        ans[3][1][2]=10;
        ans[3][1][3]=20;
        ans[3][1][4]=35;
        ans[3][1][5]=56;
        ans[3][1][6]=84;
        ans[3][1][7]=120;
        ans[3][1][8]=165;
        ans[3][2][0]=2;
        ans[3][2][1]=10;
        ans[3][2][2]=30;
        ans[3][2][3]=70;
        ans[3][2][4]=140;
        ans[3][2][5]=252;
        ans[3][2][6]=420;
        ans[3][2][7]=660;
        ans[3][3][0]=4;
        ans[3][3][1]=20;
        ans[3][3][2]=70;
        ans[3][3][3]=188;
        ans[3][3][4]=420;
        ans[3][3][5]=840;
        ans[3][3][6]=1542;
        ans[3][4][0]=5;
        ans[3][4][1]=35;
        ans[3][4][2]=140;
        ans[3][4][3]=420;
        ans[3][4][4]=1050;
        ans[3][4][5]=2310;
        ans[3][5][0]=7;
        ans[3][5][1]=56;
        ans[3][5][2]=252;
        ans[3][5][3]=840;
        ans[3][5][4]=2310;
        ans[3][6][0]=10;
        ans[3][6][1]=84;
        ans[3][6][2]=420;
        ans[3][6][3]=1542;
        ans[3][7][0]=12;
        ans[3][7][1]=120;
        ans[3][7][2]=660;
        ans[3][8][0]=15;
        ans[3][8][1]=165;
        ans[3][9][0]=19;
        ans[4][0][0]=1;
        ans[4][0][1]=1;
        ans[4][0][2]=3;
        ans[4][0][3]=5;
        ans[4][0][4]=10;
        ans[4][0][5]=14;
        ans[4][0][6]=22;
        ans[4][0][7]=30;
        ans[4][0][8]=43;
        ans[4][1][0]=1;
        ans[4][1][1]=5;
        ans[4][1][2]=15;
        ans[4][1][3]=35;
        ans[4][1][4]=70;
        ans[4][1][5]=126;
        ans[4][1][6]=210;
        ans[4][1][7]=330;
        ans[4][2][0]=3;
        ans[4][2][1]=15;
        ans[4][2][2]=54;
        ans[4][2][3]=140;
        ans[4][2][4]=318;
        ans[4][2][5]=630;
        ans[4][2][6]=1160;
        ans[4][3][0]=5;
        ans[4][3][1]=35;
        ans[4][3][2]=140;
        ans[4][3][3]=420;
        ans[4][3][4]=1050;
        ans[4][3][5]=2310;
        ans[4][4][0]=10;
        ans[4][4][1]=70;
        ans[4][4][2]=318;
        ans[4][4][3]=1050;
        ans[4][4][4]=2896;
        ans[4][5][0]=14;
        ans[4][5][1]=126;
        ans[4][5][2]=630;
        ans[4][5][3]=2310;
        ans[4][6][0]=22;
        ans[4][6][1]=210;
        ans[4][6][2]=1160;
        ans[4][7][0]=30;
        ans[4][7][1]=330;
        ans[4][8][0]=43;
        ans[5][0][0]=1;
        ans[5][0][1]=1;
        ans[5][0][2]=3;
        ans[5][0][3]=7;
        ans[5][0][4]=14;
        ans[5][0][5]=26;
        ans[5][0][6]=42;
        ans[5][0][7]=66;
        ans[5][1][0]=1;
        ans[5][1][1]=6;
        ans[5][1][2]=21;
        ans[5][1][3]=56;
        ans[5][1][4]=126;
        ans[5][1][5]=252;
        ans[5][1][6]=462;
        ans[5][2][0]=3;
        ans[5][2][1]=21;
        ans[5][2][2]=84;
        ans[5][2][3]=252;
        ans[5][2][4]=630;
        ans[5][2][5]=1386;
        ans[5][3][0]=7;
        ans[5][3][1]=56;
        ans[5][3][2]=252;
        ans[5][3][3]=840;
        ans[5][3][4]=2310;
        ans[5][4][0]=14;
        ans[5][4][1]=126;
        ans[5][4][2]=630;
        ans[5][4][3]=2310;
        ans[5][5][0]=26;
        ans[5][5][1]=252;
        ans[5][5][2]=1386;
        ans[5][6][0]=42;
        ans[5][6][1]=462;
        ans[5][7][0]=66;
        ans[6][0][0]=1;
        ans[6][0][1]=1;
        ans[6][0][2]=4;
        ans[6][0][3]=10;
        ans[6][0][4]=22;
        ans[6][0][5]=42;
        ans[6][0][6]=80;
        ans[6][1][0]=1;
        ans[6][1][1]=7;
        ans[6][1][2]=28;
        ans[6][1][3]=84;
        ans[6][1][4]=210;
        ans[6][1][5]=462;
        ans[6][2][0]=4;
        ans[6][2][1]=28;
        ans[6][2][2]=128;
        ans[6][2][3]=420;
        ans[6][2][4]=1160;
        ans[6][3][0]=10;
        ans[6][3][1]=84;
        ans[6][3][2]=420;
        ans[6][3][3]=1542;
        ans[6][4][0]=22;
        ans[6][4][1]=210;
        ans[6][4][2]=1160;
        ans[6][5][0]=42;
        ans[6][5][1]=462;
        ans[6][6][0]=80;
        ans[7][0][0]=1;
        ans[7][0][1]=1;
        ans[7][0][2]=4;
        ans[7][0][3]=12;
        ans[7][0][4]=30;
        ans[7][0][5]=66;
        ans[7][1][0]=1;
        ans[7][1][1]=8;
        ans[7][1][2]=36;
        ans[7][1][3]=120;
        ans[7][1][4]=330;
        ans[7][2][0]=4;
        ans[7][2][1]=36;
        ans[7][2][2]=180;
        ans[7][2][3]=660;
        ans[7][3][0]=12;
        ans[7][3][1]=120;
        ans[7][3][2]=660;
        ans[7][4][0]=30;
        ans[7][4][1]=330;
        ans[7][5][0]=66;
        ans[8][0][0]=1;
        ans[8][0][1]=1;
        ans[8][0][2]=5;
        ans[8][0][3]=15;
        ans[8][0][4]=43;
        ans[8][1][0]=1;
        ans[8][1][1]=9;
        ans[8][1][2]=45;
        ans[8][1][3]=165;
        ans[8][2][0]=5;
        ans[8][2][1]=45;
        ans[8][2][2]=250;
        ans[8][3][0]=15;
        ans[8][3][1]=165;
        ans[8][4][0]=43;
        ans[9][0][0]=1;
        ans[9][0][1]=1;
        ans[9][0][2]=5;
        ans[9][0][3]=19;
        ans[9][1][0]=1;
        ans[9][1][1]=10;
        ans[9][1][2]=55;
        ans[9][2][0]=5;
        ans[9][2][1]=55;
        ans[9][3][0]=19;
        ans[10][0][0]=1;
        ans[10][0][1]=1;
        ans[10][0][2]=6;
        ans[10][1][0]=1;
        ans[10][1][1]=11;
        ans[10][2][0]=6;
        ans[11][0][0]=1;
        ans[11][0][1]=1;
        ans[11][1][0]=1;
        ans[12][0][0]=1;
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);
        int sum=0;
        for(int i=0;i<=a;i++)
        for(int j=0;j<=b;j++)
        for(int k=0;k<=c;k++){
            sum+=ans[i][j][k];
        }
        printf("%lld
    ",sum);
        
        return 0;
    }
    超级长的代码,你确定要看?

    打表代码:

    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int ans[13][13][13];
    int distinc(int *a,int k){
        int ans=1;
        for(int i=1;i<k;i++){
            for(int j=0;j<k;j++){
                if(a[j]!=a[(j+i)%k])goto A;
            }
            ans++;
            A:;
        }
        return ans;
    }
    int main(){
        for(int i=0;i<=12;i++)
        for(int j=0;j<=12-i;j++)
        for(int k=0;k<=12-i-j;k++){
            if(i+j+k==0)continue;
            int sss[13];
            int t=i,sp=0;
            while(t){
                t--;
                sss[sp++]=1;
            }
            t=j;
            while(t){
                t--;
                sss[sp++]=2;
            }
            t=k;
            while(t){
                t--;
                sss[sp++]=3;
            }
            if(sp!=i+j+k)return 1;
            do{
                ans[i][j][k]+=distinc(sss,sp);
            }while(next_permutation(sss,sss+sp));
            ans[i][j][k]/=(i+j+k);
            printf("ans[%d][%d][%d]=%d;
    ",i,j,k,ans[i][j][k]);
        }
        //printf("%lld
    ",ans);
        
        return 0;
    }
  • 相关阅读:
    OpenSSL生成rsa密钥对
    RabbitMQ工作模式
    加密解密
    MongDB优化
    java线程进程
    MongoDB数据类型
    获取指针指向的内存大小方法
    [教程] 让Mac OS 10.x.x安装在Vmware虚拟机上!
    安装好的苹果系统部分截图
    VC中MFC程序手动控制最近文件列表
  • 原文地址:https://www.cnblogs.com/isakovsky/p/14219431.html
Copyright © 2011-2022 走看看