A - A Cookie for You
方法一:可以将一类客人看作是缩小饼干差,将二类客人看成是增大饼干差,可以将两种饼干数量拉平,即让第一类客人吃,此时让二类客人吃,看其中饼干最少的量,若不够,则无法满足。若足够,则再比较剩余饼干总数与一类客人总数,即可得解
#include<bits/stdc++.h>
using namespace std;
long long t,a,b,n,m,temp,jug;
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b>>n>>m;
jug=0;
if(n+m>a+b){cout<<"No"<<endl;continue;}
if(a>b){
temp=a-b;
if(n>=temp){
n-=temp;
a-=temp;
}
else{
n=0;
a-=n;
}
}
else if(a<b){
temp=b-a;
if(n>=temp){
n-=temp;
b-=temp;
}
else{
n=0;
b-=n;
}
}
if(a!=b){
if(min(a,b)>=m)jug=1;
else jug=0;
}
else{
if(m>a)jug=0;
else if(n>a+b-m)jug=0;
else jug=1;
}
if(jug==1)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
方法二:直接将二类客人与一类客人相比,若二类客人所需饼干小于较小值,则无法满足条件。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
long long m,a,b,c,d;
cin >> m;
while (m--) {
cin >> a >> b >> c >> d;
if (a+b<c+d)
cout << "No"<<endl;
else
{
if (d > min(a, b))
cout << "No"<<endl;
else
cout << "Yes"<<endl;
}
}
return 0;
}
总结:贪心算法的一类应用。