您的位置:首页 > 其它

多校6 HDU-6106 Classes 容斥原理

2017-08-10 23:04 393 查看
题目链接:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  容斥原理 多校