题目笔记 CF 1494b


巧妙地利用位运算枚举状态

题目

Tutorial

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
typedef long long ll;
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
const int Max=100010;
const int inf=0x7f7f7f7f;
using namespace std;
int n,t,u,l,d,r;

bool f()
{
    for(int i=0;i<(1<<4);i++)
    {
        int u1=u,l1=l,r1=r,d1=d;
        if(i&1) u1--,l1--;
        if(i&2) u1--,r1--;
        if(i&4) r1--,d1--;
        if(i&8) d1--,l1--;
        
        if(u1<0||l1<0||r1<0||d1<0) continue;
        if(u1<=n-2&&r1<=n-2&&l1<=n-2&&d1<=n-2) return true;
    }
    return false;
}

int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n;
        cin>>u>>r>>d>>l;
        if(f()) puts("yes");
        else puts("no");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/juuich/p/14477882.html