说 实 话 看 到 这 题 一 开 始 我 也 是 懵 的 说实话看到这题一开始我也是懵的

但 是 怎 么 做 呢 ? 会 分 类 就 很 好 做 。 但是怎么做呢?会分类就很好做。 ?

分析

Ⅰ . 第 一 类 客 人 喜 欢 吃 多 的 那 个 饼 干 \color{Red}Ⅰ.第一类客人喜欢吃多的那个饼干 .

Ⅱ . 第 二 类 客 人 喜 欢 吃 少 的 那 个 饼 干 \color{Red}Ⅱ.第二类客人喜欢吃少的那个饼干 .

思路

解 法 一 、 让 第 二 类 客 人 先 吃 \color{orange}解法一、让第二类客人先吃

(首先感谢Code92007指正了我开始以为只能让第一类客人先吃的想法)

第二类客人最多吃 m i n ( a , b ) min(a,b) min(a,b)个饼干,如果这都没得吃那就不行。

否则第二类客人满足了,那么直接让第一类客人开始吃。

第一类客人可以先吃多的,吃到两种饼干相等就交替吃饼干

所 以 第 一 类 客 人 最 多 可 以 把 两 种 饼 干 吃 完 所以第一类客人最多可以把两种饼干吃完

最后看看第一类客人能否满足就好了

解 法 二 : 让 第 一 类 客 人 先 吃 ( 麻 烦 一 点 ) \color{orange}解法二:让第一类客人先吃(麻烦一点) :()

先 让 第 一 类 客 人 先 吃 多 的 饼 干 直 到 两 种 饼 干 一 样 多 先让第一类客人先吃多的饼干直到两种饼干一样多

如 果 多 的 被 它 吃 之 后 仍 然 多 , 就 看 看 第 二 类 客 人 能 否 吃 饱 输 出 答 案 如果多的被它吃之后仍然多,就看看第二类客人能否吃饱输出答案 ,

否 则 , 现 在 两 种 饼 干 变 得 一 样 多 了 , 接 下 来 怎 么 考 虑 ? \color{Red}否则,现在两种饼干变得一样多了,接下来怎么考虑? ,,?

现 在 就 让 第 二 类 人 吃 一 口 , 第 一 类 人 再 吃 一 口 ( 可 以 保 持 平 衡 ) 现在就让第二类人吃一口,第一类人再吃一口(可以保持平衡) ,()

接 下 来 会 有 一 类 人 率 先 吃 完 , 那 么 就 简 单 判 断 剩 下 的 人 能 否 吃 饱 就 好 了 接下来会有一类人率先吃完,那么就简单判断剩下的人能否吃饱就好了 ,

我比较菜,下面的代码想的是第二种做法

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,n,m;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>a>>b>>n>>m;
		ll cha = max(a,b)-min(a,b);//先吃到饼干一样多 
		if(cha>=n) //如果没把多的吃到一样多第一类人就没了 
		{
			ll s=min(a,b);//考虑第二类人即可 
			if(m<=s)	cout<<"Yes"<<endl;
			else	cout<<"No"<<endl;
		}
		else
		{
			a<b?b=a:a=b;//先吃到一样多 
			n-=cha;//耗费cha个第一类人去吃 
			ll chi=min(n,m);//第二类吃一口,第一类吃一口 
			if(a<chi||b<chi)	cout<<"No"<<endl;
			else 
			{
				a-=chi,b-=chi;//注意此时a,b仍然相等 
				n-=chi,m-=chi;	
				if(n!=0)//此时剩下第一类人 
				{
					if(a+b>=n)	cout<<"Yes"<<endl;//第一类人最多全部吃掉 
					else	cout<<"No"<<endl;	
				}
				else//剩第二类人 
				{
					if(a>=m)	cout<<"Yes"<<endl;//只能吃少的 
					else	cout<<"No"<<endl;
				}
			} 
		}
	}
}