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

codeforces 869C The Intriguing Obsession

题意

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

分析

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

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

参考代码


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;
}
全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
今天 22:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务