B.Plus from Picture

You have a given picture with size w×hw×h. Determine if the given picture has a single "+" shape or not. A "+" shape is described below:

  • A "+" shape has one center nonempty cell.
  • There should be some (at least one) consecutive non-empty cells in each direction (left, right, up, down) from the center. In other words, there should be a ray in each direction.
  • All other cells are empty.

Find out if the given picture has single "+" shape.

Input

The first line contains two integers hh and ww (1≤h1≤h, w≤500w≤500) — the height and width of the picture.

The ii-th of the next hh lines contains string sisi of length ww consisting "." and "*" where "." denotes the empty space and "*" denotes the non-empty space.

Output

If the given picture satisfies all conditions, print "YES". Otherwise, print "NO".

You can output each letter in any case (upper or lower).

Examples
input

Copy
5 6
......
..*...
.****.
..*...
..*...
output

Copy
YES
input

Copy
3 5
..*..
****.
.*...
output

Copy
NO
input

Copy
7 7
.......
...*...
..****.
...*...
...*...
.......
.*.....
output

Copy
NO
input

Copy
5 6
..**..
..**..
******
..**..
..**..
output

Copy
NO
input

Copy
3 7
.*...*.
***.***
.*...*.
output

Copy
NO
input

Copy
5 10
..........
..*.......
.*.******.
..*.......
..........
output

Copy
NO
Note

In the first example, the given picture contains one "+".

In the second example, two vertical branches are located in a different column.

In the third example, there is a dot outside of the shape.

In the fourth example, the width of the two vertical branches is 22.

In the fifth example, there are two shapes.

In the sixth example, there is an empty space inside of the shape.

题目大意:就是输入w*h个字符,分别为'*'或'.',规定当形成这样的图形时,则称中间的大五角星为中心点,每次输入时有且仅有一个这样的中心点输出“YES”,否则输出“NO”.

思路:直接暴力搜索,注意剪枝即可,遍历所有输入,当该点为*是,判断其是否为中心点,当中心点数大于1时(不符合题意了),跳出遍历;当该点与中心点的行列都不一致时,也输出“NO”;

要注意这样一种情况,所以要对只有一个中心点的测试数据,进行筛选,看是否有这样的点出现。代码如下:

7 7
.......
...*...
..****.
...*...
...*...
.......
...*...

 #include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <string>
#define LL long long
const int max_n=;
using namespace std;
int w,h;
int tx[]={,-,,};
int ty[]={,,,-};
struct node{
int x,y;
}num[];
char mp[max_n][max_n];
bool pan(int a,int b)//判断该点是否越界
{
return a>=&&b>=&&a<w&&b<h;
}
bool bfs(int a,int b)//判断点(a,b)是不是中心点
{
int n=;
for(int i=;i<;i++)
{
int nx=a+tx[i],ny=b+ty[i];
if(mp[nx][ny]=='*'&&pan(nx,ny))n++;
}
if(n==)return true;
else return false;
} int main()
{
int t=,f=;//中心点数,*数
scanf("%d %d",&w,&h);
for(int i=; i<w;i++)
cin>>mp[i];
for(int i=;i<w;i++)
{
bool judge=false,to=false;//判断是否为中心点,to剪枝
for(int j=;j<h;j++)
{
if(mp[i][j]=='*')f++;//计数
if(mp[i][j]=='*'&&t>&&i!=num[].x&&j!=num[].y){//当该点与已知中心点不在统一行列时
to=true;
break;
}
if(mp[i][j]=='*'){
judge=bfs(i,j);
if(judge){num[t].x=i,num[t].y=j;t++;}//是中心点,存下坐标
if(t>){
to=true;
break;
}
}
}
if(to){//剪枝
t=;
break;
}
}
if(t==)//对中心点数为1的数据筛选
{//遍历,因为多减了一次中心点坐标,所以符合题意的f应为-1
int ex=num[].x,ey=num[].y;
for(int i=ex;i<w;i++)
{
if(mp[i][ey]=='*')f--;
else break;
}
for(int i=ex-;i>=;i--)
{
if(mp[i][ey]=='*')f--;
else break;
}
for(int j=ey;j<h;j++)
{
if(mp[ex][j]=='*')f--;
else break;
}
for(int j=ey-;j>=;j--)
{
if(mp[ex][j]=='*')f--;
else break;
} }
if(f>-||t!=)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
return ;
}

codeforces#566(Div.2)B的更多相关文章

  1. Codeforces Round #566 (Div. 2)

    Codeforces Round #566 (Div. 2) A Filling Shapes 给定一个 \(3\times n\) 的网格,问使用 这样的占三个格子图形填充满整个网格的方案数 如果 ...

  2. Codeforces #344 Div.2

    Codeforces #344 Div.2 Interview 题目描述:求两个序列的子序列或操作的和的最大值 solution 签到题 时间复杂度:\(O(n^2)\) Print Check 题目 ...

  3. Codeforces #345 Div.1

    Codeforces #345 Div.1 打CF有助于提高做题的正确率. Watchmen 题目描述:求欧拉距离等于曼哈顿距离的点对个数. solution 签到题,其实就是求有多少对点在同一行或同 ...

  4. Codeforces Beta Round #27 (Codeforces format, Div. 2)

    Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...

  5. Codeforces#441 Div.2 四小题

    Codeforces#441 Div.2 四小题 链接 A. Trip For Meal 小熊维尼喜欢吃蜂蜜.他每天要在朋友家享用N次蜂蜜 , 朋友A到B家的距离是 a ,A到C家的距离是b ,B到C ...

  6. codeforces #592(Div.2)

    codeforces #592(Div.2) A Pens and Pencils Tomorrow is a difficult day for Polycarp: he has to attend ...

  7. codeforces #578(Div.2)

    codeforces #578(Div.2) A. Hotelier Amugae has a hotel consisting of 1010 rooms. The rooms are number ...

  8. codeforces #577(Div.2)

    codeforces #577(Div.2) A  Important Exam A class of students wrote a multiple-choice test. There are ...

  9. codeforces #332 div 2 D. Spongebob and Squares

    http://codeforces.com/contest/599/problem/D 题意:给出总的方格数x,问有多少种不同尺寸的矩形满足题意,输出方案数和长宽(3,5和5,3算两种) 思路:比赛的 ...

随机推荐

  1. 前几天去电脑城升级了下主机配置(酷睿i3-9100F)

    因为自用电脑配置有点儿低了,前几天路过电脑城正好顺便升级下主机配置. 平时又不玩儿什么游戏,只是简单的使用,于是酷睿i3-9100F就成为了我的选择. 酷睿i3-9100F 四核四线程,不带核显(GP ...

  2. python接口自动化17-multipart/form-data表单提交

    前言 multipart/form-data这种格式官方文档给的参考案例比较简单,实际情况中遇到会比较复杂,本篇讲解multipart/form-data的表单如何提交,非图片上传 禅道提交bug 1 ...

  3. Springboot测试类之@RunWith注解

    @runWith注解作用: --@RunWith就是一个运行器 --@RunWith(JUnit4.class)就是指用JUnit4来运行 --@RunWith(SpringJUnit4ClassRu ...

  4. java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact

    线上环境中部署的 Tomcat 项目,出现部分页面无法打开的情况,但本地环境是好的.经过排查发现,本地 Tomcat版本为 7.0.77,而线上版本为 7.0.88.报错的具体描述为java.lang ...

  5. max的高级用法

  6. meta设置与去除默认样式--移动端开发整理笔记(一)

    视口设置: <meta name="viewport" content="width=device-width,user-scalable=no,initial-s ...

  7. 初识PIXI.js

    由于项目需要接触到PIXI这个框架,故开始了一顿打头操作 由于目前PIXI的文档还是很少,而且大多数是英文文档这里提供几个PIXI的demo和文档 demo: http://47.99.120.179 ...

  8. md5-js加密

    JS-MD5加密/html页面使用 大家都知道,传输明文信息很不安全,尤其像密码.卡号等这些敏感私密的信息,更不能暴露出去.在这里给大家介绍一种在前端JS中的MD5加密算法(因为要匹配的后台数据是MD ...

  9. MySQL数据库索引类型、MySQL索引的优化及MySQL索引案例

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  10. Vue中的v-bind指令

    普通: property="value" 此时 value为字符串 v-bind指令 v-bind:property="value" 此时 value会被解析成 ...