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;
}

浙公网安备 33010602011771号