题解 P1702 【突击考试】

· · 题解

来自蒟蒻的题解。。。 这道题已经给出 1≤A[i],B[i]≤5 的条件,从等级一到等级五挨个模拟即可。 代码:

#include<iostream>
using namespace std;
int s[100001][2],t[6];//数组s代表课桌及考生等级,数组t分别代表等级1~5最大的排数 
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s[i][0]>>s[i][1];//s[i][0]、s[i][1]分别表示同一课桌两人的等级 
    }
    for(int i=1;i<=5;i++)// 等级1~5模拟 
    {
        int ans=0,x=0;
        for(int o=0;o<n;o++)
        {
            if(s[o][0]==i||s[o][1]==i)
            {
                x++;//如果该课桌符合条件,排数加一 
            }
            if(s[o][0]!=i&&s[o][1]!=i||o==n-1)//若i的连续排数一直到最后的课桌的话也要计数,故判断条件有 o==n-1 
            {
                ans=max(ans,x);//不符合,刷新i等级的最大排数 
                x=0;//重新计数 
            }
        }
        t[i]=ans;//得出等级i最大排数 
    }
    int max=0,maxs=0;
    for(int i=1;i<=5;i++)//寻找最大排数及其最小等级 
    {
        if(t[i]>max)
        {
            maxs=i;//最大排数 
            max=t[i];//最大排数的等级 
        }
    }
    cout<<max<<" "<<maxs;//输出 

    return 0;
}