CF140D New Year Contest 题解

Content

小 G 想打一场跨年比赛,比赛从下午 \(18:00\) 开始一直持续到次日清晨 \(6:00\),一共有 \(n\) 道题目。小 G 在比赛开始之前需要花费 10 分钟考虑这些题目的复杂度,10 分钟之后 TA 会了解了每道题目需要做的时间 \(a_1,a_2,a_3,...,a_n\),然后他就会开始做这些题目,但要注意的是,如果在 \(0:00\) 之后交,就会有罚时,罚时为 \(0:00\) 到现在距离的时间长度,多次罚时会累加进入总罚时。现在,小 G 想知道自己最多能够做的题目数量,以及在满足这个条件下的最小罚时。

数据范围:\(1\leqslant n\leqslant 100,1\leqslant a_i\leqslant 720\)

Solution

我们利用贪心的思想,先将每道题目按照需要做的时间从小到大排序,然后依次去做,就能够保证做题数量最多,并且罚时也会是最少的。一句话,排完序之后只需要模拟就完事。

Code

int n, a[107], s[107], ans, res;

int main() {
	//This program is written in Windows 10 by Eason_AC
	getint(n);
	_for(i, 1, n)	getint(a[i]);
	sort(a + 1, a + n + 1);
	_for(i, 1, n) {
		if(s[i - 1] + a[i] > 710) {
			writeint(ans = i - 1), putchar(' '), writeint(res);
			return 0;
		}
		s[i] = s[i - 1] + a[i];
		res += max(0, s[i] - 350);
	}
	writeint(ans = n), putchar(' '), writeint(res);
	return 0;
}
posted @ 2021-12-16 15:17  Eason_AC  阅读(26)  评论(0)    收藏  举报