文章

【GESP】C++一级练习 luogu-P1534, 不高兴的津津(升级版)

GESP一级综合练习,需要一点程序解题的小思考,推荐练习,难度★✮☆☆☆。

luogu-P1534

题目要求

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

这次与 NOIp2004 普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后 $n$ 天的日程安排,看看以后 $n$ 天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去 $8$ 后得到的数作为今天不高兴程度);输出以后 $n$ 天结束后不高兴程度和是多少。

输入格式

第一行共一个数 $n$。

第二行至第 $n+1$ 行,每行两个数,表示这天上学时间和课外补习班时间。

输出格式

一个数,这 $n$ 天过后的不高兴程度和。

样例输入 #1

1
2
3
4
5
6
7
8
7
5 3
6 2
7 2
5 3
5 4
0 4
0 6

样例输出 #1

1
-2

数据范围及约定

对于全部数据,上学时间和上课时间各不超过 $8$,和不超过 $16$,$n \le 3000$。


题目分析

  1. 理解题目要求
    • 每天有上学时间和课外补习时间
    • 一天总学习时间超过8小时会不高兴
    • 不高兴程度会持续到第二天
    • 需要计算n天后的总不高兴程度
  2. 解题思路
    • 每天的不高兴程度 = 前一天的不高兴程度 + (今天总学习时间 - 8)
    • 用变量记录前一天的不高兴程度
    • 用变量累加每天的不高兴程度
    • 循环n天,计算最终的不高兴程度总和

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main() {
    int a;  // 天数
    cin >> a;
    int b, c;  // b是上学时间,c是上课时间
    int ans = 0;  // 存储最终的不高兴程度总和
    int y = 0;  // 存储前一天剩余的不高兴程度
    for (int i = 1; i <= a; i++) {
        cin >> b >> c;
        int t = (c + b) - 8;  // 计算当天产生的不高兴程度(上学+上课时间-8)
        int t_1 = t + y;  // 当天总的不高兴程度 = 当天产生的 + 前一天剩余的
        ans += t_1;  // 累加到总和中
        y = t_1;  // 更新前一天的不高兴程度
    }
    cout << ans;  // 输出最终的不高兴程度总和
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权