不高兴的津津

GitHub跳转原题关系图返回列表

逐天求校内与妈妈安排课时之和,边走边更新最大总课时及对应天数;最大值严格超过 8 时输出该天编号,否则输出 0。

OJ: roj

题目 ID: 3528

难度:入门

标签:入门模拟最值python

创建: 2026-10-02 05:51

更新: 2026-10-06 13:02

题目描述

津津每天除了校内上课,还要上妈妈安排的复习班。若一天上课超过 8 小时她就会不高兴,上课越久越不高兴。输入 7 行,依次表示周一到周日,每行两个小于 10 的非负整数,分别为校内课时与妈妈安排的课时;输出最不高兴的那天编号(周一为 1……周日为 7),若没有任何一天超过 8 小时则输出 0,若多天并列则输出最靠前的一天。样例输入依次是 5 3、6 2、7 2、5 3、5 4、0 4、0 6,输出 3。

思路

逐天把两个数相加得到当天总课时,边走边更新「最大总课时」和「对应天数」;只在严格大于当前最大值时更新,并列时就会自然保留最靠前的一天。读完后若最大值超过 8 就输出记录的天数,否则输出 0。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-10-02 05:52
# update_at: 2026-10-02 05:52

import sys

DAYS = 7     # 周一到周日共 7 天
LIMIT = 8    # 一天上课恰好 8 小时还不算,超过 8 小时才不高兴


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    loads = [next(data) + next(data) for _ in range(DAYS)]  # 每天的总课时(校内 + 妈妈安排)

    worst = max(loads)
    # list.index 取首个最大值,天然满足"同分时输出时间最靠前的一天"
    print(loads.index(worst) + 1 if worst > LIMIT else 0)


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-06 13:02
 * update_at: 2026-10-06 13:02
 */
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int DAYS = 7; // 周一到周日共 7 天
const ll LIMIT = 8; // 恰好 8 小时仍算高兴,严格超过 8 小时才不高兴

ll a[DAYS + 1]; // a[i] 表示第 i 天在校上课的小时数
ll b[DAYS + 1]; // b[i] 表示第 i 天妈妈安排的课时数

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    for (int i = 1; i <= DAYS; i++) {
        cin >> a[i] >> b[i];
    }

    // 求一天的最大总课时;平局时保留最早出现的那天,满足“输出时间最靠前的一天”。
    ll max_load = -1;
    int worst_day = 0;
    for (int i = 1; i <= DAYS; i++) {
        ll load = a[i] + b[i];
        if (load > max_load) {
            max_load = load;
            worst_day = i;
        }
    }

    if (max_load > LIMIT) {
        cout << worst_day << endl;
    } else {
        cout << 0 << endl;
    }

    return 0;
}