P6444 [COCI2010-2011#1] PROFESOR题解

· · 题解

题目传送门

更好的阅读体验

题外话:你们代码都好长欸

Part 1 题目转化

教室里面一共有 N 个课桌,按照顺序排成一列,每个课桌可以坐两个人,记他们的能力等级为 A_i , B_i 。现在教授决定对能力等级为 K 的人进行测验。他会从这 N 排中选择连续的 L 排进行测验,要求这 L 排中的每一排至少有一个人考试等级为 K。现在我们想知道 L 的最大值以及对应的等级 K。(这样就好理解些叭)

Part 2 题目分析

因为 k 范围非常小,所以暴力枚举 k 值,然后判断连续出现 k 的长度 L 。

Part 3 代码

#include <bits/stdc++.h>
using namespace std;
int n;
int a[100100],b[100100];
int x,y;
int main(){
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i]>>b[i];
    for(int grade=1;grade<=5;grade++){//枚举k值
        int len=0;//长度
        for(int i=0;i<n;i++){
            if(a[i]==grade||b[i]==grade)len++;
            else len=0;
            if(len>x){x=len;y=grade;}
        }
    }
    cout<<x<<" "<<y<<endl;
    return 0;//完结撒花~~
}

AC记录

我的博客~~

by 2021.11.28 我的第三篇题解