热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CF869CTheIntriguingObsession(排列组合)

链接:https:ac.nowcoder.comacmcontest21791E来源:牛客网题目描述岛上有三种颜色的岛屿,分别是红色、蓝色和紫色。岛群分别由a,ba,b和cc个不同

链接:https://ac.nowcoder.com/acm/contest/21791/E

来源:牛客网

题目描述

岛上有三种颜色的岛屿,分别是红色、蓝色和紫色。岛群分别由

a

,

b

a,b和

c

c个不同的岛组成。

在一些(可能全部或没有)岛屿之间建立了桥梁。一座桥双向连接两个不同的岛,长度为

1

1。对于任意两个相同颜色的岛,要么不能通过桥相互到达,要么它们之间的最短距离至少为

3

3。

Fire Sisters 已准备好迎接未知,但他们也想测试您的勇气。你来这里是为了找出在约束条件下建造所有桥梁的不同方法的数量,并给出模

998244353

998244353 的答案。如果存在一对岛,它们之间有一座桥,但另一种没有桥,则两种方法被认为是不同的。

输入描述:

输入包含三个空格分隔的整数

a

,

b

,

c



1



a

,

b

,

c



5000



a,b,c(1≤a,b,c≤5000),分别表示岛群中红色、蓝色和紫色的岛数。

输出描述:

输出一行包含一个整数,表示构建桥梁的不同方法的数量,模

998244353

998244353。

示例1

输入

复制

1 1 1

输出

复制

8

说明

在这个例子中,有 3 座可能建造的桥,并且没有任何桥的设置违反限制。因此答案是


2

3

8

2

3

=8。

示例2

输入

复制

1 2 2

输出

复制

63

说明

下图中,上方两个是有效结构,而下方两个是无效的。

示例3

输入

复制

1 3 5

输出

复制

3264

示例4

输入

复制

6 2 9

输出

复制

813023575

根据题意,两个同色的岛之间的最短距离为3等价于两个同色的岛屿之间不能有边相连,同时两个同色的岛屿也不能同时连接到同一个岛。这样就好办了,对于每两种颜色可以计算这两种颜色的岛之间的连边的方案数,然后由乘法原理把这三种方案数乘起来即可。对于A和B这两种颜色,如果他们之间的岛屿连边一定是一个类似二分图的形式,只需要枚举连的边的数量然后用组合数计算方案即可。形式化地来说,对于输入的a和b,若这两种颜色的岛屿的连边数为i,那么方案数就是\(C_{a}^{i}\times C_{b}^{i}\times i!\),阶乘的话也很好理解。


// Created on 解志国的iPad.
#include
#define ll long long
#define LL long long
#define mod 998244353
#define p 998244353
using namespace std;
ll a, b, c, ans = 1;
ll F(ll x) {
ll ans = 1;
for(int i = 1; i <= x; i++) {
ans = ans * i % mod;
}
return ans;
}
const int maxn=1000005;
void extend_gcd(LL a,LL b,LL &x,LL &y){
if(b==0){
x=1,y=0;
return;
}
extend_gcd(b,a%b,y,x);
y-=a/b*x;
}
LL inv[maxn+10];
LL f[maxn+10];
void init(){//阶乘及其逆元打表
f[0]=1;
for(int i=1;i<=maxn;i++){
f[i]=f[i-1]*i%p;
}
LL x,y;
extend_gcd(f[maxn],p,x,y);//先求出f[N]的逆元,再循环求出f[1~N-1]的逆元
inv[maxn]=(x%p+p)%p;
for(int i=maxn-1;i>=1;i--){
inv[i]=inv[i+1]*(i+1)%p;
}
}
LL C(LL n,LL m){
if(n==m||m==0)return 1;
return (f[n]*inv[m]%p*inv[n-m]%p)%p;
}
int main() {
init();
cin >> a >> b >> c;
ll ta = 0, tb = 0, tc = 0;
for(ll i = 0; i <= min(a, b); i++) {
ta = (ta + (C(a, i) * C(b, i) % mod * F(i) % mod) % mod) % mod;
}
for(ll i = 0; i <= min(b, c); i++) {
tb = (tb + (C(b, i) * C(c, i) % mod * F(i) % mod) % mod) % mod;
}
for(ll i = 0; i <= min(a, c); i++) {
tc = (tc + (C(a, i) * C(c, i) % mod * F(i) % mod) % mod) % mod;
}
cout < return 0;
}


推荐阅读
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
温温
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有