输出格式
每组数据输出一行结果,如果存在合理方案,则输出 YES,否则输出 NO。
数据范围
1≤t≤1000,
2≤n≤100,
0≤U,R,D,L≤n
输入样例:
4
5 2 5 3 1
3 0 0 0 0
4 4 1 4 0
2 1 1 1 1
输出样例:
YES
YES
NO
YES
样例解释
下面是样例 1,2,4 的可行方案:
对于每个方向的涂色的数量可以分成两部分,一个是可以影响其他方向的角,还有不会影响其他方向的边。
只有角是会影响到其他方向的,最难处理的也是角
所以我们可以二进制枚举四个角的情况,如果要求的值减去角的值大于等于0,小于等于n-2,那么就可行(边可以涂0到n-2个)
AC代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,U,D,L,R;
scanf("%d %d %d %d %d",&n,&U,&R,&D,&L);
bool flag=0;
for(int i=0;i<=15;++i){
int u,d,l,r;
u=(1&(i>>3))+(1&(i>>2));
r=(1&(i>>2))+(1&(i>>1));
d=(1&(i>>1))+(1&(i));
l=(1&(i))+(1&(i>>3));
if(U-u>=0&&U-u<=n-2
&&D-d>=0&&D-d<=n-2
&&L-l>=0&&L-l<=n-2
&&R-r>=0&&R-r<=n-2){
flag=1;
break;
}
}
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}