题解 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;
}