1. 程式人生 > 其它 >CF140D New Year Contest 題解

CF140D New Year Contest 題解

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