CF1468N 题解

洛谷链接&CF 链接

题目简述

共有 \(T\) 组数据,对于每组数据:

有三个桶,五种垃圾,每个桶有固定的容量。

前三种垃圾分别放入三种桶中,第四种垃圾可以放进 \(1,3\) 桶中,第五种垃圾可以放进 \(2,3\) 桶中。

问题:对于给定的桶容量和垃圾量,请问垃圾是否可以全部放入桶中?

思路

简单贪心题。

贪心思路很简单,首先装 \(1,2,3\) 种垃圾,如果此时都装不下直接输出 NO,因为这三种垃圾只能装入 \(1,2,3\) 号桶。

那么接下来就是处理剩下两种垃圾,发现这两种垃圾都可装入 \(3\) 号桶,所以需要优先装 \(1,2\) 号桶,装不下之后再装 \(3\) 号,如果此时装不下,则输出 NO,否则输出 YES

下面是代码实现:

#include<iostream>
using namespace std;

int T, a, b, c, d, e, x, y, z; // 垃圾及桶

int main(){
	cin >> T; // 多组数据!
	while(T --) {
		cin >> x >> y >> z;
		cin >> a >> b >> c >> d >> e; // 分别输入垃圾数及桶数
		if(x < a || y < b || z < c) {
			cout << "NO\n"; // 1 2 3 装不下,输出 NO
			continue;
		}
		x -= a, y -= b, z -= c; // 能装下就装
		d -= x, e -= y; // 剩下两种垃圾,分别优先装入 1 2 号桶
		d = max(0, d), e = max(0, e); // 去除负数情况!!
		if(z >= d + e) cout << "YES\n"; // 剩下垃圾能装下
		else cout << "NO\n"; // 装不下
	}
	return 0;
}

提交记录

\[\text{The End!} \]

posted @ 2023-08-02 16:35  So_noSlack  阅读(13)  评论(0编辑  收藏  举报