P1702 突击考试
题目描述
一日,老师决定进行一次突击考试。已知每个学生都有一个考试能力等级,教室里一共有 N N N 个课桌,按照顺序排成一列,每张课桌可以坐两个人,第 i i i 张课桌坐的两个人的能力等级为 A i , B i A_i,B_i Ai,Bi。现在老师决定对能力等级为 K K K 的人进行测验。他会从这 N N N 排中选择连续的 L L L 排进行测验,要求这 L L L 排中的每一排至少有一个人考试能力等级为 K K K。现在我们想知道 L L L 的最大值以及对应的等级 K K K。
输入格式
第 1 1 1 行:一个整数 N N N;
第 2 2 2 至第 N + 1 N+1 N+1 行:每行两个整数,表示 A i , B i A_i,B_i Ai,Bi。
输出格式
两个整数 L L L 和 K K K,要求在 L L L 最大的条件下 K K K 最小。
输入输出样例 #1
输入 #1
3
3 5
4 5
1 3
输出 #1
2 5
说明/提示
数据范围及约定
对于全部数据, 1 ≤ N ≤ 100 , 000 1 \le N \le 100,000 1≤N≤100,000, 1 ≤ A [ i ] , B [ i ] ≤ 5 1 \le A[i],B[i] \le 5 1≤A[i],B[i]≤5。
C++实现
#include
using namespace std;
int s[100001][2],t[6];
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++){
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||on-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;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容