公布成绩(改)解析
题目描述
有 $n$ 个学生,第 $i$ 个学生希望在第 $t_i$ 天或之前得知课程的成绩。如果在第 $t_i$ 天之前成绩公布了,他就会非常开心,每提前一天就会产生 $B$ 点愉快度。但如果在第 $t_i$ 天成绩没有公布,他就会等待,每等待一天就会产生 $C$ 不愉快度。所以同学的愉快度总和,等于愉快度减去不愉快度,可以为负数。请你编写程序,根据输入的 $m$,计算当成绩在第 $1$ 天到第 $m$ 天公布时,所有学生的愉快度之和分别是多少。
输入格式
第一行三个正整数 $n,m,B,C$,分别表示学生的数量是 $n$,询问的天数是 $m$,每提前一天就会产生 $B$ 愉快度。,每等待一天就会产生 $C$ 不愉快度。 第二行 $n$ 个正整数,表示每个学生希望的公布成绩的时间。
输出格式
输出一行 $m$ 个空格隔开整数,第 $i$ 个整数表示当成绩在第 $i$ 天公布时,愉快度之和。
1 |
|
代码分析
输入处理:
首先读取四个整数 $n,m,B,C$,分别表示学生数量、询问天数、提前一天的愉快度和等待一天的惩罚。
然后读取 $n$ 个整数,表示每个学生希望的公布成绩的时间。初始化结果数组:
创建一个大小为 $m$ 的数组results
,用于存储每一天的愉快度总和,初始值为 0。计算每一天的愉快度:
遍历每一天 $d$(从 1 到 $m$)。
对于每一天,遍历所有学生,计算他们的愉快度或惩罚,并累加到 $totalHappiness$ 中。
如果学生希望的公布成绩时间 $t_i$ 小于等于 $d$,则计算提前公布的愉快度 $B \times (t_i - d)$。
否则,计算延迟公布的惩罚 $C \times (d - t[i])$。
将计算得到的 $totalHappiness$ 存储到results
数组中。输出结果:
遍历results
数组,输出每一天的愉快度总和。