cf 1494b

在这里插入图片描述
这个题,哎,想了一天,先入为主的思想严重,四个边角是关键,除去四个边角影响两个边,剩下的n-2个点是不会相互影响的,这些都容易想到,然后想反过来搞,先假设四边都黑,删去某些点,但是,反着搞没有使得问题简化,然后正着来,希望用一种贪心的思想来做,先考虑填满n-2个点,在考虑边角,按逆时针逐次的考虑,但是这样能不能成功需要运气,贪心策略试了不少,但都有漏洞。那么,改变一下,先考虑边角,再考虑n-2个点,那么,边角只有四个,可以用状态压缩的思想,0表示不填,1表示填,四位二进制数就可以模拟所有情况,这点想到了,就都顺利成章了。

这个题烦人的地方就是我们往往喜欢先考虑不变的n-2个点,再用剩下的边角来充当贪心的筹码,结果会陷进思维陷阱里,运气好了可以上岸,但往往难以弥补漏洞,交换一下考虑顺序,交换的依据是四个边角点所能组成的情况很少,只有16种。

#include <bits/stdc++.h>
//#define int long long
#define ioss ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
template <class cl>
void read(cl &x)
{
    x = 0;
    int f = 0;
    char ch;
    ch = getchar();
    while (!isdigit(ch))
    {
        f = f | (ch == '-'), ch = getchar();
    }
    while (isdigit(ch))
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    x = f ? -x : x;
    return;
}
template <class cl>
void put(cl x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        put(x / 10);
    putchar(x % 10 + '0');
    return;
}
int n;
int a[5];
int x[5];
int flag;
inline void to()
{
    read(n);
    for(int i=0;i<=3;i++)
    {
        read(a[i]);
    }
    for(int i=0;i<(1<<4);i++)
    {
        for(int j=0;j<4;j++)
        {
            x[j]=a[j];
        }
        for(int j=0;j<=3;j++)
        {
           if((1<<j)&i)
           {
              x[j]--;
              x[(j-1+4)%4]--;
           }
        }
         flag=0;
        for(int j=0;j<=3;j++)
        {
            if(x[j]<0)
            {
                flag=1;break;
            }
            else if(x[j]>n-2)
            {
               flag=1;break;
            }
        }
        if(flag==0)
        {
            puts("yes");
            return ;
        }
    }
    puts("no");
    return ;
}
signed main()
{
   int t;
   read(t);
   while(t--)
   {
      to();
   }
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值