题目链接: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 解题报告的更多相关文章

  1. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  2. Codeforces Round 662 赛后解题报告(A-E2)

    Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...

  3. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...

  4. codeforces B. Simple Molecules 解题报告

    题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...

  5. 【LeetCode】469. Convex Polygon 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 计算向量夹角 日期 题目地址:https://leet ...

  6. codeforces 591A. Wizards' Duel 解题报告

    题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...

  7. codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...

  8. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...

  9. codeforces 577B. Modulo Sum 解题报告

    题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...

随机推荐

  1. arch 安装

    xfce参考 http://my.oschina.net/u/1408707/blog/182581#OSC_h2_6 chm阅读 – chmsee作为一个苦逼的码农,要忍受各种chm文件的蹂躏,这个 ...

  2. Cocos2d-X中Menu的综合运用

    今天将曾经写的代码和项目集成到了一个菜单中,能够通过菜单切换到曾经做的项目 程序的project文件夹 主要代码分析: LessonMenu.h中实现创建菜单,遍历菜单通过菜单切换到各个项目 #ifn ...

  3. Access自定义函数(人民币大写)

    人民币大写函数:整数不超过13位. Public Function 人民币大写(A) As String Dim aa As String Dim bb As String Dim cc As Str ...

  4. 132-pattern(蛮难的)

    https://leetcode.com/problems/132-pattern/ 下面是我的做法.后来又看了一个提示: https://discuss.leetcode.com/topic/678 ...

  5. 自己封装的CMusic类 【转】

    http://www.cnblogs.com/zhangminaxiang/archive/2013/02/27/2936011.html 缘由: 在改正俄罗斯方块程序的功能的时候,想给这个程序增加一 ...

  6. 现代数字信号处理——AR模型

    1. AR模型概念观       AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推, ...

  7. 【Nginx】开发一个HTTP过滤模块

    与HTTP处理模块不同.HTTP过滤模块的工作是对发送给用户的HTTP响应做一些加工. server返回的一个响应能够被随意多个HTTP过滤模块以流水线的方式依次处理.HTTP响应分为头部和包体,ng ...

  8. jQeury入门:遍历

    一旦用jQuery创建一个初始的包装集.你就能深度遍历刚刚选择的包装集. 遍历能够被分为三个基础元件:父级.子级,同级.jQuery为全部这些元件提供丰富易用的方法.注意每个方法都能轻易的传递给字符串 ...

  9. 有关C/C++指针的经典面试题(转)

    参考一: 有关C/C++指针的经典面试题 0.预备知识,最基础的指针 其实最基础的指针也就应该如下面代码: int a; int* p=&a; 也就是说,声明了一个int变量a,然后声明一个i ...

  10. 笔记本POWER部分的应用——(MOS/LDO/BUCK BOOST)

    一.MOSFET 简介: 金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)是一 ...