codeforces B. Convex Shape 解题报告
题目链接:http://codeforces.com/problemset/problem/275/B
题目内容:给出一个n * m 大小的grid,上面只有 black 和 white 两种颜色填充。问任意两个black cell 的连通是否满足最多转一次弯而达到。当然,如果有好多堆black cell 也是不满足条件的,即只能有一堆!!
这是继color the fence 之后,又一条花了我很长时间才做出来的题目,因为搜索这些技巧学不好,于是只能结合观察能力做出来了。其实最直接的方法应该是bfs,可惜= =,好啦我会加油的!!!
主要分成两个个部分判断:1、black cell 是否有且仅为一堆
2、判断是否存在这两种类型:
‘Z’ 类型比较难判断,借鉴了别人的思路:就是判断红色标识的两处地方是否都为'W'
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
char grid[maxn][maxn], tmp[maxn][maxn];
int n, m, cnt; #define REP(i, n) for(i = 1; i <= (n); i++) void dfs(int x, int y) // 判断是否为一堆black cell
{
if (x >= && x <= n && y >= && y <= m && tmp[x][y] == 'B')
{
tmp[x][y] = 'W';
dfs(x-, y);
dfs(x+, y);
dfs(x, y-);
dfs(x, y+);
}
} int main()
{
int i, j, l, k;
while (scanf("%d%d", &n, &m) != EOF)
{
memset(grid, , sizeof(grid));
memset(tmp, , sizeof(tmp));
REP(i, n) REP(j, m)
{
cin >> grid[i][j];
tmp[i][j] = grid[i][j];
}
cnt = ;
REP(i, n) REP(j, m)
{
if (tmp[i][j] == 'B')
{
dfs(i, j);
cnt++;
}
}
if (cnt >= ) // 多于1堆
printf("NO\n");
else
{
int flag = ;
// 判断类型1
for (i = ; i <= n && !flag; i++)
{
for (j = ; j <= m && !flag; j++)
{
if (grid[i][j] == 'B' && grid[i][j+] == 'W')
{
j++;
while (grid[i][j] == 'W' && j <= m)
j++;
if (grid[i][j] == 'B' && j <= m)
flag = ;
}
}
}
if (!flag)
{
for (j = ; j <= n && !flag; j++)
{
for (i = ; i <= m && !flag; i++)
{
if (grid[i][j] == 'B' && grid[i+][j] == 'W')
{
i++;
while (grid[i][j] == 'W' && i <= n)
i++;
if (grid[i][j] == 'B' && i <= n)
flag = ;
}
}
}
}
// 判断类型2
if (!flag)
{
REP(i, n) REP(j, m) REP(k, n) REP(l, m)
{
if (grid[i][j] == 'B' && grid[k][l] == 'B' && grid[k][j] == 'W' && grid[i][l] == 'W')
{
flag = ;
break;
}
}
}
if (!flag)
printf("YES\n");
else
printf("NO\n");
}
}
return ;
}
codeforces B. Convex Shape 解题报告的更多相关文章
- Codeforces Round 665 赛后解题报告(暂A-D)
Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...
- Codeforces Round 662 赛后解题报告(A-E2)
Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...
- Codeforces Round #277.5 解题报告
又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...
- codeforces B. Simple Molecules 解题报告
题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...
- 【LeetCode】469. Convex Polygon 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 计算向量夹角 日期 题目地址:https://leet ...
- codeforces 591A. Wizards' Duel 解题报告
题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...
- codeforces 582A. GCD Table 解题报告
题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...
- codeforces 581C. Developing Skills 解题报告
题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...
- codeforces 577B. Modulo Sum 解题报告
题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...
随机推荐
- ArrayList和LinkedList学习
摘要 ArrayList和LinkedList是对List接口的不同数据结构的实现.它们都是线程不安全的,线程不安全往往出现在数组的扩容.数据添加的时候. 一.ArrayList和LinkedList ...
- 访问权限修饰符Protected专题
上图描述:A类在a包下,m()方法被protected修饰 上图描述:B类也在a包下,B类是A类的子类. 解析:B类和A类是同包类,B类是A类的子类,因此b对象可以调用m()方法. 上图描述:C类也在 ...
- mybatis ----SqlSessionManager
今天我们来看看这个类 有些写法还是很经典的 public class SqlSessionManager implements SqlSessionFactory, SqlSession { priv ...
- 2008 SQL SERVER 用户 架构
2008 SQL SERVER 用户: SERVER用户与数据库用户 SERVER 与 数据库用户的映射,以使 登陆用户可访问数据库 架构等同于SCHEM (表空间),即表空间管理对象,建立层次对象关 ...
- Android 自定义ListView Item侧滑删除
本程序是基于网上开源项目修改而来,具体来源忘了,懒得搜了,如果有不合适的地方,请原作者联系我,我会及时回复和处理的! 该例子程序中主要包含两个ListView,一个是实现侧滑删除,一个是侧滑出菜单,代 ...
- 转: 浅析Fusion-IO和Intel SSD
from: http://alanwu.blog.51cto.com/3652632/865235 标签:SSD 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- VMware安装黑群暉5.2
选择典型就可以了,点击下一步. 选择 稍后安装操作系统,点击下一步. 客户机操作系统选择Linux,版本选择其他Linux2.6.x内核64位, 填写虚拟机名称和虚拟机文件保存位置的.填写好后点击 ...
- 怎样高速启动Android模拟器(Android Emulator)
总所周知,每次我们启动Android Emulator,都须要花费非常长一段时间,几分钟甚至十几分钟.事实上,我们能够使用快照(Snapshot)功能,来高速启动Android模拟器. 首先.须要在A ...
- C# Window编程随记——ClickOnce程序部署
关于ClickOnce我们要说的主要有一下两点: 什么是ClickOnce? ClickOnce的使用 一.什么是ClickOnce(来自百度) ClickOnce 是一种部署技术,使 ...
- 深入解析Ajax——系列(一)
常常写脚本的人.有时候会用到$ajax,有时候也会用到$post和$get,这几个方法都是用来从Webserver上获取静态的数据文件. jQuery对ajax操作进行了封装,在jquery中$.aj ...