Codeforces 1475C. Ball in Berland(二元容斥)

博客探讨了如何利用二元容斥原理解决Codeforces上的一道竞赛题目——1475C Ball in Berland。问题涉及到在一个班级的男生和女生中,选择不重复的男女对参加毕业典礼的组合数。通过分析数据和应用公式P(a∪b)=P(a)+P(b)-P(ab),博主提供了枚举所有可能组合并修正重复计算的方法来求解合法方案数。
摘要由CSDN通过智能技术生成

题目传送门
在这里插入图片描述
在这里插入图片描述

题意:
一个班级有a个男生和b个女生,现在这个班级有k对男女愿意一起出席毕业典礼,这里注意k对男女中可能会有某个男生或女生出现在多个pair中。
你从这k对中找出两对,使得这两对中的男生不相同、女生不相同,即一个男生或女生不可能在一个典礼中出现在两对中。
让你求出一共有多少种可能的组合方式。

分析:
针对下面的这样一组数据,有4对匹配的方式,假设我们让第一对(1,2)出席毕业典礼,即男1号女2号参加,那么与男1号相联系的其他组合均不能再参加,与女2号相关的其他组合也不能参加。那么就有 【k-与男1号相联系的其他组合均不能再参加的数量-与女2号相关的其他组合也不能参加的数量 + 1情况数】(在我们选择(1,2)参加的情况下,会有的组合方式的数量)。
合法方案数=所有的方案数-不合法的方案数.
P(a∪b)=P(a)+P(b)−P(ab)

那我们依次枚举k次,将所有可以组合的数量累加,注意需要再将总情况除以2(模拟下来我们发现所有的情况计算了两次)。

1 1 2 3
2 3 2 4

#include<iostream>
#include<cstring>
#include<algorithm>
#include
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值