3711. 方格涂色
题目大意:给你u,r,d,l四条边黑色块的个数,求是否有可能实现!!!
说实话一开始一直在找有没有那种是否满足的公式,越想越复杂,最后放弃了!!发现这题标签是枚举才换了思路!!!
那么这题核心是他的四个角,四个角会影响每条边的个数,不如我们枚举每个角的情况一共16种,然后对每一种进行判断就不需要思考之前复杂的情况了,这就是思维枚举,想的到就是签到题哈哈!!
那么怎么枚举呢???我们采用二进制,0000-1111,每一位代表一个角,到时候取出每一位即可!
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int cnt[N][N];
int u,r,d,l,n;
bool check(int a,int b,int c){
a=a-b-c;
if(a>=0&&a<=n-2) return true;
else return false;
}
int main(){
int t;
cin >> t;
/*
cout << (1>>1) << endl;
cout << (1<<4);
*/
while(t--){
cin >> n >> u >> r >> d >> l;
int f=0;
for(int i=0;i<(1<<4);i++){//0000-1111
int d1,d2,d3,d4;//4个角
d1=(i&1);
d2=((i>>1)&1);
d3=((i>>2)&1);
d4=((i>>3)&1);
if(check(u,d1,d2)&&check(r,d2,d3)&&check(d,d3,d4)&&check(l,d1,d4)) f=1;
}
if(f) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}