HDU 6106 Classes

来源:互联网 发布:淘宝卖家发货扫描单号 编辑:程序博客网 时间:2024/06/01 07:18

题目链接

题目描述

学校有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 longint 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);    }}
原创粉丝点击