CF140D题解

CF140D 题解

题意

有一个跨年比赛从晚上六点到次日早上六点,总共有 \(n\) 道题,第 \(i\) 题要花 \(a_i\) 分钟,每题的罚时为提交时间与 \(0\) 点的时间差,在比赛开始时,需要花 \(10\) 分钟看题的难度,求能做的最答题数和。

思路

简单的贪心题。

要想做的题数最多而且罚时越少,那就先做花时间少的题,能在 \(0\) 点前做完的题那就一起在 \(0\) 点的时候交,这样在 \(0\) 点前做的题全不用罚时。

总结

  1. 需要花 \(10\) 分钟看题的难度。
  2. 每题的罚时为提交时间与 \(0\) 点的时间差。
  3. 总比赛的时间为 \(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;
}
posted @ 2025-01-29 15:31  naroto2022  阅读(25)  评论(0)    收藏  举报