Description
有A,B,C三个课程,N个班的学生要选课,给出每个班选
Input
第一行一整数
Output
对于每组用例,输出这N个班中至少选一门课程的学生人数最大值
Sample Input
2
2
4 5 4 4 3 2 2
5 3 1 2 0 0 0
2
0 4 10 2 3 4 9
6 12 6 3 5 3 2
Sample Output
7
15
Solution
容斥一下得到只选
Code
#include<cstdio>
#include<algorithm>
using namespace std;
namespace fastIO
{
#define BUF_SIZE 100000
//fread -> read
bool IOerror=0;
inline char nc()
{
static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
if(p1==pend)
{
p1=buf;
pend=buf+fread(buf,1,BUF_SIZE,stdin);
if(pend==p1)
{
IOerror=1;
return -1;
}
}
return *p1++;
}
inline bool blank(char ch)
{
return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';
}
inline void read(int &x)
{
char ch;
while(blank(ch=nc()));
if(IOerror)return;
for(x=ch-'0';(ch=nc())>='0'&&ch<='9';x=x*10+ch-'0');
}
inline void readc(char &x)
{
char ch;
while(blank(ch=nc()));
if(IOerror)return;
x=ch;
}
#undef BUF_SIZE
};
using namespace fastIO;
int T,N,A,B,C,AB,BC,AC,ABC;
int check()
{
AB-=ABC,BC-=ABC,AC-=ABC;
A-=AB+AC+ABC;
B-=AB+BC+ABC;
C-=BC+AC+ABC;
if(A<0||B<0||C<0||AB<0||BC<0||AC<0)return 0;
return A+B+C+AB+BC+AC+ABC;
}
int main()
{
read(T);
//scanf("%d",&T);
while(T--)
{
read(N);
//scanf("%d",&N);
int ans=0;
while(N--)
{
read(A),read(B),read(C),read(AB),read(BC),read(AC),read(ABC);
//scanf("%d%d%d%d%d%d%d",&A,&B,&C,&AB,&BC,&AC,&ABC);
ans=max(ans,check());
}
printf("%d\n",ans);
}
return 0;
}