多校6 HDU-6106 Classes 容斥原理

题目链接:
HDU-6106

大意:
有三个科目 A,B,C 。已知一个班级选修情况 ,分别为选择 A 的人数,选择 B 的人数,选择 C 的人数,选择 AB 的人数,选择 BC 的人数,选择 AC 的人数,选择 ABC 的人数,
给出 N 个班级,而且有的班级数据是错误的(无法计算),求这些班级里总人数最多为多少。

思路:
画一个韦恩图,每个小块都可以计算出来,着每个小块的人数都必须为自然数。

代码实现;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(s,t) memset(s,t,sizeof(s))
#define D(v) cout<<#v<<" "<<v<<endl
#define inf 0x3f3f3f3f
#define getans (DIS(x,y,x1,y1)+DIS(x,y,x2,y2))
//#define LOCAL
inline void read(int &x){
    x=0;char p=getchar();
    while(!(p<='9'&&p>='0'))p=getchar();
    while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();
}
int main() {
#ifdef LOCAL
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif
    int t;
    read(t);
    while(t--){
        int n;
        read(n);
        int ans=0;
        while(n--){
            int a,b,c,d,e,f,g;
            scanf("%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g);
            int ret=0;
            if(a-d-f+g<0)  continue;
            if(b-d-e+g<0)  continue;
            if(c-e-f+g<0)  continue;
            if(d-g<0 || e-g<0 || f-g<0) continue;
            ret=(a+b+c-d-e-f+g);
            ans=max(ans,ret);
        }
        printf("%d\n",ans);

    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值