51nod 1448 二染色问题 (逆向考虑)
题目:

注意,这题不是把一块区域的黑翻成白、白翻成黑。
是把一块区域全部翻成白或者翻成黑。
初始为全白,看能否翻出题中的情况。
我们假设翻转若干次能得到图中的形状,那么我们找出最后一次的翻转,即全W或者全B,让这一块区域置为随机。(随机可以看做B或者W中的一个)
直到把所有的这样的翻转全部找出来,置为随机。
看最后是否有一定是B的点,如果有就说明无法翻转到图中的形状,否则可以翻转。
代码:
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <set>
#include <math.h>
#include <queue>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
typedef long long ll;
#define INF 2147483647 int t,n,k;
char a[][]; //判断以(x,y)为左上角的区域是否为同色,且不全为随机。
bool isSame(int x,int y){
bool flagB = false,flagW = false;
for(int i = x;i <= x+k-; i++){
for(int j = y;j <= y+k-; j++){
if(a[i][j] == 'B'){
flagB = true;
}else if(a[i][j] == 'W'){
flagW = true;
} if(flagB && flagW){
return false;
}
}
}
if(!flagB && !flagW) return false;
return true;
} //以(x,y)为左上角的区域置为随机
void makeRandom(int x,int y){
for(int i = x;i <= x+k-; i++){
for(int j = y;j <= y+k-; j++){
a[i][j] = 'R';
}
}
} int main(){
cin >> t;
while(t--){
cin >> n >> k;
for(int i = ;i <= n; i++)
for(int j = ;j <= n; j++)
cin >> a[i][j];
while(true){
bool update = false;
for(int i = n-k+;i >= ; i--){
for(int j = n-k+;j >= ; j--){
// cout << i << " " << j <<endl;
if(isSame(i,j)){
makeRandom(i,j);
update = true;
}
}
}
if(!update) break;
} bool flag = true;
for(int i = ;i <= n; i++){
for(int j = ;j <= n; j++){
if(a[i][j] == 'B'){
flag = false;
}
}
}
if(flag){
cout << "Possible" << endl;
}else{
cout << "Impossible" << endl;
} }
return ;
}
51nod 1448 二染色问题 (逆向考虑)的更多相关文章
- NOIP2010关押罪犯 二分+二染色
这个题一上来 没有思路,后来想没有思路就二分吧 那么我们来二分 首先,大于当前的mid值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明 ...
- hdu 5285 wyh2000 and pupil(二染色)
第一次用vector解得题.值得纪念,这道题是二染色问题,我用bfs解得.就是染色,推断,计数问题,其 实挺简单的,就是得判一下特殊情况,当n<2的时候就不能有解,由于题目要求每一个组至少有一个 ...
- codeforces Gym 100286J Javanese Cryptoanalysis (二染色)
每一单词相邻两个字母,不能同时为元音或者辅音... 各种姿势都可以过:7个for,dp,黑白染色,dfs,并查集.... 最主要的思路就是相邻字母连边,把元音和辅音看成两个集合,那么有连边的两个字母一 ...
- 51nod 1213 二维曼哈顿距离最小生成树
1213 二维曼哈顿距离最小生成树 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间 ...
- 【51nod】1655 染色问题
题解 首先每个颜色出现的次数应该是一样的 \(\frac{C_{n}^{2}}{n} = \frac{n - 1}{2}\) 所以n如果是偶数那么就无解了 然后我们需要让每个点连颜色不同的四条边 只要 ...
- 【51nod 1824】染色游戏
题目 有 n 个红球, m 个蓝球,从中取出 x 个红球和 y 个蓝球排成一排的得分是 rx⋅by ,其中 r0=b0=1 . 定义 f(t) 表示恰好取出 t 个球排成一排的所有可能局面的得分之和. ...
- NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- bzoj 1324 Exca王者之剑(黑白染色,最小割)
[题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...
随机推荐
- Flask_URL和视图
1.Flask_URL和视图 1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__na ...
- 调试相关blogs收集
Debug Diag官方blog https://blogs.msdn.microsoft.com/debugdiag/ Tess https://blogs.msdn.microsoft.com ...
- Android Studio 一些注意事项(自用,不定期更新)
1,Android Studio 版本的选择 写这篇的时候,官方版本已经到了 v3.2.0,而我习惯使用的版本是 v2.3.1,因为这个版本有自带sdk的安装版,比较方便, 同时,v2.3.1 新建项 ...
- OAuth2建立webapi认证服务供自己的客户端使用--密码模式
场景:你自己实现了一套webApi,想供自己的客户端调用,又想做认证. 第一步:通过vs2015建立web api项目,Startup.cs,这个类将会作为Owin的启动类. 第二步:在webapi. ...
- 使用Latex写book类型文本的体会
晚上参考中科院上海交大清华北大等学校的模板,终于重新把博一时候没解决的问题解决了.中科院吴老师的CTeX论坛因为维护压力比较大不得不关了,查不到之前的Latex解决答案.经过一下午和一晚上的摸索,忽然 ...
- Android studio关于点击事件后的页面跳转,选择完成后返回(onActivityResult)
我这个人喜欢直接上代码,在代码中说明更方便,更直接. 首先在.xml中设置一个button按钮,和一个EditText框,并分别做好id号. 这里我以籍贯测试对象. <LinearLayout ...
- 列表查询组件代码, 简化拼接条件SQL语句的麻烦
列表查询组件代码, 简化拼接条件SQL语句的麻烦 多条件查询
- python爬虫:爬取医药数据库drugbank
这个是帮朋友做的,难点就是他们有一个反爬虫机制,用request一直不行,后面我就用selenium直接把网页copy下来,然后再来解析本地的html文件,就木有问题啦. 现在看来,写得有点傻,多包涵 ...
- 五分钟DBA:浅谈伪分布式数据库架构
[IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...
- Pyhton学习——Day54
#Django内容回顾# -请求响应HTTP协议(有.无状态)默认传递的是字符串# 传递字符串分为两个部分:1.http1.1 GET /url /index + 请求头# Provisional h ...