题意:
给出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 a,b是任何数,第一类总是可以满足规则。第二类就总是选个数最小的那一类。所以,我们可以先满足第二类,因为刚开始时候的 m i n ( a i , b i ) min(ai, bi) min(ai,bi)最大( a i , b i ai,bi ai,bi,是第 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;
}