这是一道超级水的模拟 + 简单搜索。

说说思路:

先找到中心点,就是自己和上下左右都为 * 的。

上下左右上的所有 * 都删掉,然后再看看有没有多余的 * 如果有输出 NO 否则输出 YES

比如说有这样一个 \(n = 5\) 的图:

\[\begin{matrix}
.&.&.&.&*\\
.&.&*&.&.\\
.&*&*&*&*\\
.&.&*&.&.\\
.&.&*&.&.
\end{matrix}\]

首先一个一个找,当找到一个点,自己本身和上下左右均为 \(*\) 时(如图中 \(a\) 点):

\[\begin{matrix}
.&.&.&.&*\\
.&.&*&.&.\\
.&*&a&*&*\\
.&.&*&.&.\\
.&.&*&.&.
\end{matrix}\]

将上下左右上的一条全部变为 \(*\):

\[\begin{matrix}
.&.&.&.&*\\
.&.&.&.&.\\
.&.&.&.&.\\
.&.&.&.&.\\
.&.&.&.&.
\end{matrix}\]

那我们就会发现图中还有 \(*\) 没有变成 \(.\) 这就说明此加号不合法。

上代码:

/*
Problem:CF1182B
Date:14/06/20 12:02
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#define line cout << endl
#define int long long
using namespace std;
char ma[2005][2005];
int h, w;
bool flag;
void up (int i, int j) {
ma[i][j] = '.';
if (ma[i - 1][j] == '*')
return up(i - 1, j);
}
void down (int i, int j) {
ma[i][j] = '.';
if (ma[i + 1][j] == '*')
return down(i + 1, j);
}
void left (int i, int j) {
ma[i][j] = '.';
if (ma[i][j - 1] == '*')
left(i, j - 1);
}
void right (int i, int j) {
ma[i][j] = '.';
if (ma[i][j + 1] == '*')
return right(i, j + 1);
}
void kill (int i, int j) {
ma[i][j] = '.';
up (i - 1, j);
down (i + 1, j);
left (i, j - 1);
right (i, j + 1);
}
void test () {//测试(i,j)是不是一个加号的中心
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++)
if (ma[i][j] == '*' &&
ma[i - 1][j] == '*' &&
ma[i][j - 1] == '*' &&
ma[i + 1][j] == '*' &&
ma[i][j + 1] == '*') {//对第一个可能的十字的中心
kill (i, j);//抹去这个十字
flag = true;
break;
}
if (flag) break;
}
for (int i = 1; i <= h; i++)//这时,应没有'*'了
for (int j = 1; j <= w; j++)
if (ma[i][j] == '*')
flag = false;
}
signed main () {
cin >> h >> w;
for(int i = 1; i <= h; i++)
for(int j = 1; j <= w; j++)
cin >> ma[i][j];
test();
if(flag) puts("YES");
else puts("NO");
return 0;
} 谢谢。

【题解】「CF1182B」Plus from Picture的更多相关文章

  1. 题解 「HDU6403」卡片游戏

    link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...

  2. 题解 「SCOI2016」萌萌哒

    link Description 一个长度为 $ n $ 的大数,用 $ S_1S_2S_3 \ldots S_n $表示,其中 $ S_i $ 表示数的第 $ i $ 位,$ S_1 $ 是数的最高 ...

  3. 题解 「SDOI2017」硬币游戏

    题目传送门 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强 ...

  4. 题解 「ZJOI2018」历史

    题目传送门 Description 九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有 \(n\) 个城市,这 \(n\) 个城市被恰 ...

  5. 题解 「BZOJ3636」教义问答手册

    题目传送门 Description 作为泉岭精神的缔造者.信奉者.捍卫者.传承者,Pear决定印制一些教义问答手册,以满足泉岭精神日益增多的信徒.Pear收集了一些有关的诗选.语录,其中部分内容摘录在 ...

  6. 题解「BZOJ4310」跳蚤

    题目传送门 Description 现在有一个长度为 \(n\) 的字符串,将其划分为 \(k\) 段,使得这 \(k\) 段每一段的字典序最大子串中字典序最大的字符串字典序尽量小.求出这个字符串. ...

  7. 题解 「BZOJ2137」submultiple

    题目传送门 题目大意 给出 \(M,k\) ,求出 \[\sum_{x|M}\sigma(x)^k \] 给出 \(P_i\),满足 \(n=\prod_{i=1}^{n}a_i^{P_i}\),其中 ...

  8. 题解 「BZOJ2178」圆的面积并

    题目传送门 题目大意 给出 \(n\) 个圆,求它们并的面积大小. \(n\le 10^3\) 思路 如果您不会自适应辛普森法,请戳这里学习 其实我们发现,如果我们设 \(f(x)\) 表示 \(x= ...

  9. 题解 - 「MLOI」小兔叽

    小兔叽 \(\texttt{Link}\) 简单题意 有 \(n\) 个小木桩排成一行,第 \(i\) 个小木桩的高度为 \(h_i\),分数为 \(c_i\). 如果一只小兔叽在第 \(i\) 个小 ...

随机推荐

  1. 极客mysql08

    1.innodb支持RC和RR隔离级别实现是用的一致性视图(consistent read view) 2.事务在启动时会拍一个快照,这个快照是基于整个库的. 基于整个库的意思就是说一个事务内,整个库 ...

  2. JAVA SE——集合框架

    1.首先根据业务场景选择哪种集合类型. set(无序,并且不包含重复元素),list(有序,并且允许重复元素),map(key-value,)

  3. BlockingQueue中 take、offer、put、add的一些比较

    (转自:https://blog.csdn.net/wei_ya_wen/article/details/19344939 侵删) 在java多线程操作中, BlockingQueue<E> ...

  4. 08 . Vue脚手架安装,使用,自定义配置和Element-UI导入使用

    Vue脚手架 Vue脚手架可以快速生成Vue项目基础的架构. 安装3.x版本的Vue脚手架 /* npm install -g @vue/cli@3.3 */ 基于3.3版本的脚手架命令创建Vue项目 ...

  5. 万字长文带你掌握Java数组与排序,代码实现原理都帮你搞明白!

    查找元素索引位置 基本查找 根据数组元素找出该元素第一次在数组中出现的索引 public class TestArray1 { public static void main(String[] arg ...

  6. SpringIOC的高级特性

    目录 1. lazy-Init延迟加载 1.1 XML方式开启延迟加载: 1.2 注解开启延迟加载: 1.3全局配置--default-lazy-init="": 应用场景: 2. ...

  7. Camtasia中对录制视频进行编辑——行为

    小视频的逐渐兴起,让我们的生活变得多姿多彩,同时,也造就了一批新媒体的创业者还有越来越多的网红,这不禁使我们也想加入他们的行列.但是问题来了,拍摄视频后最重要的是对视频进行剪辑,没有一款经济适用的软件 ...

  8. 【GIT】命令笔记

    1.将本地代码提交到github等仓库 1.创建仓库省略 2.切换到本地需要上传的地址 :初始化仓库 git init 3.配置git,告诉git你是谁 git config --global use ...

  9. Linux中的基本命令无法使用,报Command not found的错误的解决方法

    一般我们在Linux中执行命令的时候,会报 Command not found 的错误,报这种错误一般有两种原因:一是你的系统中没有安装这个命令,需要你手动安装,另外一种原因就是平常这些命令用着好好的 ...

  10. Apache Hudi初学者指南

    在深入研究Hudi机制之前,让我们首先了解Hudi正在解决的问题. 客户在使用数据湖时通常会问一个问题:当源记录被更新时,如何更新数据湖?这是一个很难解决的问题,因为一旦你写了CSV或Parquet文 ...