AT4783 题解

题目传送门

小学生又双叒叕来写题解啦!

这题的关键就是贪心

看到 N 的范围,瞬间明白可能要排序。

所以我们靠着排序来想。

我们来思考一下怎样安排顺序。

对于两个时间限制,时间限制短的那个任务要先做。

为什么呢?

显然,它们所需的总时间是相等的,开始的时间也是相等的。

所以,用时间限制长的来卡总时间更好,即先短后长。

排序的大问题解决了,剩下的可就简单了。

直接按这个最优顺序模拟即可。

送上满分代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct QAQ
{
	int a, b;
};
QAQ t[200005];
bool cmp(QAQ x, QAQ y)
{
	return x.b < y.b;
}
int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d%d", &t[i].a, &t[i].b);
	sort(t+1, t+n+1, cmp);
	int now = 0;   //记录当前时间。 
	for (int i = 1; i <= n; i++)
	{
		now += t[i].a;
		if (now > t[i].b)
		{
			printf("No\n");  //勿忘祖传换行。 
			return 0;
		}
	}
	printf("Yes\n");   //勿忘祖传换行。 
	return 0;
}

首发:2022-02-03 22:00:22

posted @ 2022-08-25 00:08  liangbowen  阅读(5)  评论(0编辑  收藏  举报