题解:洛谷 P1085 不高兴的津津

【题目来源】

洛谷:P1085 [NOIP 2004 普及组] 不高兴的津津 - 洛谷(luogu.com.cn)

【题目描述】

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入】

输入包括 \(7\) 行数据,分别表示周一到周日的日程安排。每行包括两个小于 \(10\) 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出】

一个数字。如果不会不高兴则输出 \(0\),如果会则输出最不高兴的是周几(用 \(1,2,3,4,5,6,7\) 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

【输入样例】

5 3
6 2
7 2
5 3
5 4
0 4
0 6

【输出样例】

3

【核心思想】

  1. 问题分析:给定津津一周7天的日程安排,每天包括学校上课时间 \(a\) 和课外班时间 \(b\)。若某天总时间 \(a+b > 8\) 则津津不高兴,且上得越久越不高兴。求最不高兴的是周几(总时间最大且最先出现),若不会不高兴则输出0。

  2. 算法选择

    • 线性扫描:遍历7天,每天计算总时间,维护当前最大总时间和对应的日期
  3. 关键步骤

    • 初始化max = 0, ans = 0
    • 遍历7天\(i\) 从1到7):
      • 读入 a, b
      • a + b > 8(不高兴):
        • a + b > max(比之前更不高兴):max = a + b, ans = i
    • 输出结果ans(若从未超过8小时则保持为0)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(7) = O(1)\),固定7次循环
    • 空间复杂度:\(O(1)\),仅需常数个变量
  5. 线性扫描的核心思想

    • 贪心更新:遇到更大的不高兴程度立即更新答案,保证"最靠前"的约束(相同值时不会更新,保留先出现的)
    • 阈值判断:先判断是否超过8小时,再比较最大值,减少不必要的比较
    • 默认输出0:初始化 ans = 0,若7天均不超过8小时则自然输出0
    • 适用于最值查找、条件筛选、周计划模拟类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件
using namespace std;

int main()
{
    int a, b, max = 0, ans = 0;  // a:上课时间,b:课外时间,max:最大总时间,ans:最不高兴的日期

    // 遍历一周7天
    for (int i = 1; i <= 7; i++) {
        cin >> a >> b;  // 输入当天的上课时间和课外时间

        // 检查当天总时间是否超过8小时
        if (a + b > 8) {
            // 如果比之前记录的最大值更大,更新最大值和日期
            if (a + b > max) {
                max = a + b;  // 更新最大总时间
                ans = i;      // 记录当前日期
            }
        }
    }

    // 输出最不高兴的日期(如果没有超过8小时的则输出0)
    cout << ans;

    return 0;
}

【运行结果】

5 3
6 2
7 2
5 3
5 4
0 4
0 6
3
posted @ 2026-08-05 15:44  团爸讲算法  阅读(22)  评论(0)    收藏  举报