-
I - Other Side
- Kattis - otherside
- 题意:狼吃羊-羊吃菜只有这两种关系,然后 一个人有这三个物品从一边银行----运到另一边银行。
- 通过船运输再没有人的在场的情况下他们就会按照两种关系去吃。
- 思路:中间的羊是关键,只要一次能拿走它,或者一次能拿走(狼+菜)就行。这一定是YES的:
-
k>=s || k>=(w+c)
- 还有一种只要k大于中间的s它就可以一直运着羊(人一直看着羊)然后无非就是多运几次最后把羊放下
-
k>s已经包含在上一条
- 但是第一条的边界情况中就有一些NO的把它们排除即可,
- k==s且k<(w+c)时这种情况之后只有当(w+c)<=2*k时是YES ,也就是样例1 这种情况他先把羊运过去再回来运满w和c
- 然后去放下,让羊上船,然后回来再让剩下的w和c上船,把羊放下,运过去之后再回来运羊,这种操作只允许,
- (w+c)<=2*k,再多了就没法交换羊了,类似的k==(w+c)且k<s时这种情况之后当s<=2*k时是YES
- 这种就是来回运一下(w+c),所以 要把除了这两个的边界去除掉也就是:
-
k==s&&(w+c)>2*k :NO k==(w+c)&&s>2*k:NO
-
#include<bits/stdc++.h> using namespace std; int w,s,c,k; int main() { scanf("%d%d%d%d",&w,&s,&c,&k); if(k==0) { printf("NO\n"); return 0; } if(k==s&&(w+c)>2*k) { printf("NO\n"); return 0; } if(k==(w+c)&&s>2*k) { printf("NO\n"); return 0; } if(k>=s||k>=(w+c)) { printf("YES\n"); return 0; } printf("NO\n"); return 0; }