打卡信奥刷题(1073)用C++实现信奥 P1702 突击考试

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 1N100,000 1 ≤ A [ i ] , B [ i ] ≤ 5 1 \le A[i],B[i] \le 5 1A[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||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;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值