cf-1494B
题目
https://codeforces.com/problemset/problem/1494/B
思路
四个角是关键要素:
- 不需要填角时直接true
- 暴力枚举所有情况(每个角填或不填)
代码
//四个角可以一个当两个 只要角被填了, 与之对应的必须要被填
//都不用填角的话直接可以
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n, a[4], T;
//不需要用到角落, 直接填
bool r()
{
for(int i = 0; i < 4; ++ i) if(a[i] > n - 2) return false;
return true;
}
bool cc(int x)
{
return x >= 0 && x <= n - 2;
}
bool check()
{
if(r()) return true;
int b[4];
//必须要用到角
//枚举用四个点, 只要有一种true
for(int i = 0; i < 2; ++ i)
{
for(int j = 0; j < 2; ++ j)
{
for(int k = 0; k < 2; ++ k)
{
for(int p = 0; p < 2; ++ p)
{
//不能在原数组上操作
memcpy(b, a, sizeof a);
if(i) b[0] --, b[1] --;
if(j) b[0] --, b[3] --;
if(k) b[1] --, b[2] --;
if(p) b[2] --, b[3] --;
int flag = 1;
for(int q = 0; q < 4; ++ q)
{
flag &= cc(b[q]);
}
if(flag)
{
return true;
}
}
}
}
}
return false;
}
int main()
{
cin >> T;
while(T --)
{
cin >> n;
for (int i = 0; i < 4; i ++ ) cin >> a[i];
if(check()) puts("YES");
else puts("NO");
}
return 0;
}

浙公网安备 33010602011771号