zoukankan      html  css  js  c++  java
  • cf869C组合计数问题

    如果在两个区域里连点,两个区域内选的点数一定要相等

    即a中选出i个点,必须与b中选出i个点相连

    连接种类数为 

    然后我们再来看,如果ab中有两点相连,其中一点再与c相连会出事吗?

    很显然不会对答案产生任何影响

    所以我们可以得出另外一个结论

    a-b b-c c-a所连的边无论如何都是两两独立的

    也就是说,如果a-b连边的可能数为x,b-c连边的可能数为y,c-a连边的可能数为z

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 5005
    #define mod 998244353
    #define ll long long
    ll n,a,b,c,ans1,ans2,ans3;
    ll C[maxn][maxn],f[maxn];
    void init(){
        memset(C,0,sizeof C);
        f[0]=f[1]=1; 
        for(int i=2;i<=5000;i++)f[i]=f[i-1]*i%mod;
        for(int i=0;i<=5000;i++)C[i][0]=C[i][i]=1;
        for(int i=1;i<=5000;i++)
            for(int j=1;j<i;j++)
                C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
    }
    int main(){
        init();
        cin>>a>>b>>c;
        int k=min(a,b);
        for(int i=0;i<=k;i++)
            ans1=(ans1+(f[i]*C[a][i]%mod)*C[b][i])%mod;    
        k=min(b,c);
        for(int i=0;i<=k;i++)
            ans2=(ans2+(f[i]*C[b][i]%mod)*C[c][i])%mod;
        k=min(c,a);
        for(int i=0;i<=k;i++)
            ans3=(ans3+(f[i]*C[a][i]%mod)*C[c][i])%mod;
        cout<<(ans1*ans2)%mod*ans3%mod<<endl;
    }
  • 相关阅读:
    JavaScript技巧45招(转)
    css3毛玻璃效果白边问题
    css3兼容性问题归纳
    H5页面JS调试
    js操作cookie的函数
    webkit webApp 开发技术要点总结【转】
    Android如何避免输入法弹出时遮挡住按钮或输入框
    Git使用问题汇总
    Known快速开发框架
    Visual Studio 常用快捷键
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10666264.html
Copyright © 2011-2022 走看看