significado del titulo
Da cinco números n, U, R, D, L n, U, R, D, Ln , U , R , D , L , representando unn × nn \times nnorte×El número de celdas negras en la capa superior de la cuadrícula de n ( U ) ( U )( U ) , el número de cuadrados negros en la columna más a la derecha( R ) ( R )( R ) , el número de cuadrados negros en la capa más baja( D ) ( D )( D ) y el número de cuadrados negros en la columna más a la izquierda( L ) ( L )( L ) . Averigüe si existe tal cuadrícula.
ideas
Todas las decisiones posibles para la cuadrícula en las cuatro esquinas están presentes. Todas las enumeraciones posibles para una cuadrícula de cuatro esquinas se pueden hacer con bitset bitsetb i t s e t para lograr.
Código aceptado
/*
* @Autor: CofDoria
* @Date: 2021-03-06 09:43:23
* @LastEditTime: 2021-03-06 14:23:21
*/
#include <bits/stdc++.h>
using namespace std;
#define db double
#define ll long long
#define inf 0x3f3f3f3f
#define s(a, n) memset(a, n, sizeof(a))
#define debug(a) cout << '#' << a << '#' << endl
#define rep(l, a, b) for (register ll l = a; l < b; ++l)
#define per(l, a, b) for (register ll l = a; l >= b; --l)
#define _ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define _forit(i, c) \
for (__typeof__((c).begin()) i = (c).begin(); i != (c).end(); ++i)
bool fi = true;
const unsigned long long MOD = 1e9 + 7;
inline ll gcd(ll a, ll b) {
return (b == 0 ? a : gcd(b, a % b)); }
int t, n, u, r, d, l, s;
bool ok;
bool f(int x, int l, int r) {
if (l) --x; // 右边顶角存在黑格,传入值减一
if (r) --x; // 左边同理
if (x >= 0 && x <= n - 2) return true; // 判断是否合法
return false;
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
_ios;
cin >> t;
while (t--) {
cin >> n >> u >> r >> d >> l;
s = 0;
ok = false;
for (; s < (1 << 4); ++s) {
bitset<4> b(s); // 将s按二进制的每位数填入b数组
// 不合法就进入下一循环,即下一种情况的枚举
if (!f(u, b[0], b[1])) continue;
if (!f(r, b[1], b[2])) continue;
if (!f(d, b[2], b[3])) continue;
if (!f(l, b[3], b[0])) continue;
// 合法即标记,并退出循环
ok = true;
break;
}
if (ok)
puts("YES");
else
puts("NO");
}
// fclose(stdin);
// fclose(stdout);
return 0;
}