不吃草的灰太郎

Description

 

小学奥数题有一个经典的题目:xjy带着一匹狼,一只羊和一捆草过河,河里有一艘船,船每次可以载一个人和一个物品,且只有xjy会划船。xjy希望把所有物品通过船送到对岸,但是当xjy不在时,狼会吃羊,羊会吃草,狼不会吃草。问怎样能把所有物品送到对岸。

聪明的你显然已经对这个问题的答案了如指掌,为了防止你拿到更多的气球,现在将问题升级:

现在,xjy正带着a匹狼,b只羊,c捆草要过河。河上有一艘容量为d的船,表示可以装载d个物品(狼,羊,草),不考虑xjy作为物品单位。请问对于给定的a,b,c,d,xjy能否在没有物品被吃掉的情况下将所有物品载到对岸?

Input

 

多组输入

每行输入a,b,c,d

0<=a,b,c,d<=1e6 且 a+b+c+d>=1

表示狼的数量,羊的数量,草的数量,船的容量。

输入总行数小于2e4

Output

 

对于每行输入

输出一行的字符串来表示xjy能否在没有物品被吃掉的情况下到达对岸

如果能 ,则输出“YES”,否则输出“NO”。(输出不包含引号)

Sample Input 1 

2 2 0 1
1 1 1 1
0 0 0 1

Sample Output 1

NO
YES
YES

Hint

对于第一个样例 xjy无法将所有物品送到对岸。

对于第二个样例 xjy先将羊送到对岸,空船返回后将狼送到对岸,此时由于xjy在场狼不能吃羊,接着xjy将羊送回,此时由于xjy在场羊不能吃草,之后再将草送到对岸,空船返回,再将羊送到对岸。至此,将所有物品送到对岸。

 狼不吃草,狼与草没有关系,所以可以把狼和草看做一类,羊是另一类,这两类不能在没有人的情况下在一起。

假定狼、草为黑,而羊为白,X=min(black,white)

当船容量足够大可以装下X且还有空间剩余时, 明显可以全部送达(将 X 一直放在船上来回运另一种颜色)。

若恰好 x=d,即没有空间剩余 时,另一种颜色必须小于等于 2*d(此时运法与 1 1 1 1 相同)

其他情况皆不可。 

#include<cstdio>
using namespace std;
int main(){
	int a,b,c,d;
	while(~scanf("%d%d%d%d",&a,&b,&c,&d)){
		if(d>a+c||d>b||(d==a+c&&b<=2*d)||(d==b&&a+c<=2*d))
		printf("YES\n");
		else
		printf("NO\n");
	}
	return 0;
}