3711. 方格涂色(枚举,思维)

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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值