C. A Cookie for You(思维,贪心)
2020-07-15 06:01
387 查看
题意:
给出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; }
相关文章推荐
- Codeforces Round #436 (Div. 2) D. Make a Permutation! 思维+贪心
- Crane ----思维+贪心
- UVa1471 Defense Lines (贪心+思维+初学lower_bound())
- 牛客练习赛51 E 数列 (二分 + 贪心 + 思维)
- hdu 4803 Poor Warehouse Keeper (贪心思维)
- poj 2393 贪心 思维
- HDU6090-思维&构造&贪心&&2017多校5-Rikka with Graph
- [CF355C]Vasya and Robot(思维,贪心)
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
- 利用贪心的思维对算法剪枝(POJ 2376)
- Codeforces 478C Table Decorations【贪心】【思维】
- Codeforces 807E Prairie Partition 贪心思维+二分
- 湘潭邀请赛G- Parentheses(贪心,思维)
- 贪心思维 专题记录 2017-7-21
- Codeforces Round #436 (Div. 2) D. Make a Permutation! 思维+贪心
- 1625 夹克爷发红包 贪心 + 暴力 + 思维
- codeforces-486【C-贪心-思维】【D-树状DP】
- Codeforce - 872 - B. Maximum of Maximums of Minimums【思维+贪心】
- 【CodeForces - 849】C From Y to Y 【思维+构造+贪心】
- CodeForces 500C New Year Book Reading(贪心+思维)