codeforces 869C The Intriguing Obsession 组合数学,逆元

来源:互联网 发布:pubmed数据库 编辑:程序博客网 时间:2024/06/04 19:19

codeforces 869C The Intriguing Obsession

题意

在三种颜色的群岛之间建造桥梁,每一种颜色分别有a,b,c
限制条件
1 相同颜色的岛之间的距离 d >= 3

分析

  1. 如果 a>b>c>a,d>=3,所以可以将问题拆分拆分成,两个群岛之间建造桥梁,使得相同颜色的岛之间d>=3
  2. 假设两个群岛分别有a,b个岛屿,

    • 一个岛屿之上不会连接相同颜色的岛屿,
    • 同样不会连接两个颜色相同颜色的岛屿,
    • 桥的个数 有 0,1,2,3,… min(a,b) 种情况
    • 在每个颜色的岛屿中取出i个,连接他们
    • 于是
      f(a,b)=i=0i=min(a,b)(ai)(bi)i !
  3. ans=f(a,b)f(b,a)f(a,c)

参考代码

const int maxn = 1e5+100;long long  inv[maxn];long long f(long long a,long long b){    long long ans = 0;    int _min = min(a,b);    long long tmp = 1;    ans += 1;    for(int i = 1; i <= _min; ++i)    {        tmp = tmp*(a-i+1)%mod * (b-i+1)%mod * inv[i] %mod;        ans = (ans + tmp) % mod;    }    return ans;}int main(void){    inv[1] = 1;    for(int i = 2; i < maxn; ++i)        inv[i] = (mod-mod/i) * inv[mod%i] % mod;    LL a,b,c;    cin>>a>>b>>c;    long long ans = 1;    ans *= f(a,b);    ans %= mod;    ans *= f(a,c);    ans %= mod;    ans *= f(b,c);    cout<<ans%mod<<endl;    return 0;}
阅读全文
0 0
原创粉丝点击