容斥:别数重了

10 分钟

班里喜欢数学的排一队、喜欢语文的排一队,有些人两样都爱,就同时站进了两队,被数了两次。想知道"至少喜欢一样"的总人数,先把两队人数加起来,再减掉"两样都爱"、重复算的那部分。

#include <iostream>
using namespace std;
int main() {
    int math = 20, chinese = 15, both = 8;
    cout << math + chinese - both << endl; // 输出 27
    return 0;
}

注意:直接算 20+15=35 就错了,因为那 8 个人被算了两次。凡是"两边都属于"的部分,都要记得减掉一次。

小纸条

20 人喜欢数学,15 人喜欢语文,8 人两样都喜欢,至少喜欢一样的有几人?

登录 后可看答案

容斥:别数重了 · C++ 入门 · op599 课程