OCAC暑期比赛第二场 I题 葡萄美酒月光杯 题解

葡萄美酒月光杯
原题链接:http://codeforces.com/problemset/problem/1114/A
【题目描述】
葡萄美酒夜光杯,欲饮琵琶马上催。
醉卧沙场君莫笑,古来征战几人回?
好诗好诗!不过我们今天的这道题目无关美酒,也没有月光杯,而是关于葡萄的。
话说这个葡萄……
为了简化起见,我们假设现在只有三种品种的葡萄:绿葡萄,紫葡萄和黑葡萄。
李白,杜甫和汪老师三个人都是葡萄爱好者,然而,他们对葡萄的品味却各不相同。为了让他们三个人都高兴,必须满足如下条件:
1、李白至少需要吃 x 颗葡萄,杜甫至少需要吃 y 颗葡萄,汪老师至少需要吃 z 颗葡萄;
2、李白对于绿葡萄有一种特殊的癖好,所以他只会吃绿葡萄;
3、杜普不喜欢黑葡萄,所以他不会吃黑葡萄;
4、汪老师来者不拒,所以他哪种葡萄都会吃。
他仨共同的朋友——白居易——在了解到他们都这么喜欢葡萄的时候,决定为他们举报一个葡萄派对。
他准备了一箱葡萄,其中包含 a 颗绿葡萄, b 颗紫葡萄, 以及 c 颗黑葡萄。
然而,白居易并不能确定他准备的这箱葡萄是否能够让他的三个朋友都高兴。
请你帮忙确定是否存在一种让三个人都满意的分配方案。
注意:你的目的是分配给三个朋友葡萄使得他们都满意,但是不一定需要分配完箱子中的葡萄。
【输入格式】
输入的第一行包含三个整数 x,y,z (1<=x,y,z<=10^5),分别用于表示李白、杜甫和汪老师至少要吃的葡萄的数量。
输入的第二行包含三个整数 a,b,c (1<=a,b,c<=10^5),分别用于表示绿葡萄、紫葡萄和黑葡萄的数量。
【输出格式】
如果存在让三个人都满意的葡萄分配方案,输出“YES”;否则输出“NO”。
【样例输入1】
1 6 2
4 3 3
【样例输出1】
YES
【样例输入2】
5 1 1
4 3 2
【样例输出2】
NO
【问题分析】
本题涉及算法:贪心。
首先,因为李白只吃绿葡萄。所以考虑先分给李白 x 颗绿葡萄,如果分不了就“NO”,分得了就 a -= x;
其次,杜甫不吃黑葡萄,所以剩下的绿葡萄和紫葡萄的个数要满足 a+b >= y;
同时,不要忘了汪老师还要吃 z 颗葡萄。
所以杜甫和汪老师总共吃的葡萄的数量还要满足一个条件: a+b+c >= y+z 。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;

int x, y, z, a, b, c;

bool check() {
    if (a < x) return false;
    a -= x;
    if (a + b < y) return false;
    if (a + b + c < y + z) return false;
    return true;
}

int main() {
    cin >> x >> y >> z >> a >> b >> c;
    puts( check() ? "YES" : "NO" );
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ocac/p/11131668.html
今日推荐