题目链接
题目描述
学校有A,B,C三类课程,N个班的学生选课,每个班给你7个数据,代表选课程A,B,C,AB,BC,AC,ABC,的人数,数据中可能有错误的,但是至少有一个是正确的。现在要你求这N个班中至少选了1门课的最大人数。
解题思路
首先我们要判断数据是否错误,如果数据错误,那么直接就可以跳过不用计算。否则,我们只需要算出选A,B,C三类课程的人数就可以知道至少选一门课的人数,然后将N个班级的人数进行对比,输出最大的即可。
选择课程ABC的人数肯定就是给出的人数,那么选择AB的人数就是用给出的选择AB的人数-ABC的人数,以此类推,可以计算选择每门课程的人数。
解题思路
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int a[101][7],b[7],t,sum,ans,n;
scanf("%d",&t);
while (t--)
{
ans=0;
scanf("%d",&n);
for (int i=0; i<n; i++)
{
for (int j=0; j<7; j++)
{
scanf("%d",&a[i][j]);
}
}
for (int i=0; i<n; i++)
{
b[6]=a[i][6];
sum=b[6];
for (int j=5; j>2; j--)
{
b[j]=a[i][j]-a[i][6];
if (b[j]<0)
{
sum=-1;
break;
}
else sum+=b[j];
}
if (sum==-1)
continue;
b[2]=a[i][2]-b[5]-b[4]-b[6];
if (b[2]<0)
{
continue;
}
else sum+=b[2];
b[1]=a[i][1]-b[3]-b[4]-b[6];
if (b[1]<0)
{
continue;
}
else sum+=b[1];
b[0]=a[i][0]-b[3]-b[5]-b[6];
if (b[0]<0)
{
continue;
}
else sum+=b[0];
if (ans<sum)
ans=sum;
}
printf("%d\n",ans);
}
}