C. A Cookie for You(思维,贪心)

C. A Cookie for You

题意:
给出4个数, a , b , c , d a, b, c, d a,b,c,d,表示第一类饼干有 a a a个,第二类饼干有 b b b个。
第一类客人有 n n n人,第二类客人有 m m m人。第一类客人会在 a > b a>b a>b时会选 a a a类,否则会选 b b b类。第二类客人会在 a > b a>b a>b时选b类,否则会选 a a a类。
问怎么安排客人选饼干可以使每个客人都按上面的规则选到饼干。

思路:
按照规则第一类客人在 a > b a>b a>b a a a,在 a = b a = b a=b b b b,在 a < b a<b a<b b b b
总的来说他总是优先选择较大的,一直选到相等的情况后,就会选 b b b,然后循环直到 n n n等于0。

按照规则第二类客人在 a > b a>b a>b选b,在 a = b a=b a=b a a a,在 a < b a<b a<b a a a
所以他总是选较小的,如果相等就会选择 a a a。若 m i n ( a , b ) > m min(a,b)>m min(a,b)>m。在 a ! = b a != b a!=b的情况下。那第二类人将一直会选较小的那一类,直到 m = 0 m=0 m=0。当 a = b a=b a=b时,他会选 a a a,又回到前面的情况,就会一直选到 m = 0 m=0 m=0

从上面可以看出无论 a , b a,b ab是任何数,第一类总是可以满足规则。第二类就总是选个数最小的那一类。所以,我们可以先满足第二类,因为刚开始时候的 m i n ( a i , b i ) min(ai, bi) min(ai,bi)最大( a i , b i ai,bi aibi,是第 i i i客人选完之后的状态。),只要这个时候满足 m i n ( a , b ) > = m min(a,b)>=m min(a,b)>=m。第二类客人就可以选完。(第一类就任意啦)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    
    
    ll t;
    cin >> t;
    while(t--) {
    
    
        ll a, b, n, m;
        cin >> a >> b >> n >> m;
        if(a+b < n+m) cout << "No\n";//饼干比人还多,肯定不满足规则。
        else if(m <= min(a, b)) cout << "Yes\n";//第二类人选完。
        else cout << "No\n";//最少的饼干数不够第二类人选。
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45363113/article/details/107132247