CF140D 题解
题意
有一个跨年比赛从晚上六点到次日早上六点,总共有 $n$ 道题,第 $i$ 题要花 $a_i$ 分钟,每题的罚时为提交时间与 $0$ 点的时间差,在比赛开始时,需要花 $10$ 分钟看题的难度,求能做的最答题数和。
思路
简单的贪心题。
要想做的题数最多而且罚时越少,那就先做花时间少的题,能在 $0$ 点前做完的题那就一起在 $0$ 点的时候交,这样在 $0$ 点前做的题全不用罚时。
总结
- 需要花 $10$ 分钟看题的难度。
- 每题的罚时为提交时间与 $0$ 点的时间差。
- 总比赛的时间为 $12$ 时 $=720$ 分。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[105],ans,num,cnt=10;
//ans 为可以答题数。
//num 为罚时。
//cnt 记录目前用了多少时间。
int main(){scanf("%d",&n);for(int i=1; i<=n; i++) scanf("%d",&a[i]);sort(a+1,a+1+n);//将做题时间从小到大排序。 for(int i=1; i<=n; i++){cnt+=a[i];if(cnt>720) break;//做的时间大于720分。(比赛已经结束) //总比赛的时间就是12小时,也就是720分钟。 ans=i;//更新做了几题。 if(cnt>360) num+=cnt-360;//如果超过0点罚时 }printf("%d %d",ans,num);return 0;
}