CF140D New Year Contest 題解
阿新 • • 發佈:2021-12-16
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; }