1 条题解

  • 0
    @ 2025-8-24 21:07:46

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:07:45,当前版本为作者最后更新于2025-05-14 15:01:55,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题考察循环结构、分支嵌套。

    本题的关键在于连续正常的最长小时数。为此,我们需要准备两个计数变量。一个是 cur,用来记录当前这一段连续正常的血压持续了多少个小时。另一个是 max_h,用来记录我们到目前为止发现的最长的连续正常时间。

    我们一个小时一个小时地来观察血压。对于每一次测量结果,我们需要判断这次血压是否正常。如果这次血压是正常的,我们就将 cur 的值加 11。如果这次血压是不正常的,相当于打断了“连续正常”。这时候,我们要看看刚刚结束的那一段连续正常的时间 cur 是不是比我们之前记录的 max_h 还要长(使用“打擂台法”更新 max_h),并且将 cur 清零。

    这样做有一个例外情况:如果血压到最后一次测量结束一直是维持正常的,那么 max_h 没有被更新过。所以,在所有循环都结束后,我们还需要再比较一次当前的 curmax_h,看看 cur 是不是比 max_h 大,如果是,就再更新一次 max_h

    参考代码:

    for (int i = 0; i < n; ++i) { // 循环 n 次,代表 n 个小时的测量
        int a, b;
        cin >> a >> b;
        if (a >= 90 && a <= 140 && b >= 60 && b <= 90) {
            // 如果血压正常
            cur++; // 当前连续正常的小时数加 1
        } else {
            // 如果血压不正常,则“打擂台”更新 max_h。
            if (cur > max_h)
                max_h = cur;
            cur = 0;
        }
    }
    // 解决例外情况
    if (cur > max_h)
        max_h = cur;
    
    • 1

    信息

    ID
    11808
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    1
    已通过
    0
    上传者