您的位置:首页 > 其它

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

2020-07-15 06:01 387 查看

C. A Cookie for You

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

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

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

从上面可以看出无论a,ba,ba,b是任何数,第一类总是可以满足规则。第二类就总是选个数最小的那一类。所以,我们可以先满足第二类,因为刚开始时候的min(ai,bi)min(ai, bi)min(ai,bi)最大(ai,biai,biai,bi,是第iii客人选完之后的状态。),只要这个时候满足min(a,b)>=mmin(a,b)>=mmin(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: