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. GitHub 下载代码命令并且导入到IDEA环境

    git clone项目到本地(项目有master和其他分支) 1.首先新建一个空文件夹,在文件夹里面git初始化操作,在文件夹的根目录下,右键选择git bash here,在弹出窗体中:       ...

  2. The Best Blockchain Open Source Projects

    https://101blockchains.com/blockchain-open-source/ Blockchain has been the buzzword of the year for ...

  3. AtCoder Grand Contest 038题解

    好久没更了 写点东西吧= = A 01Matrix 简单构造 左上角和右下角染成1其他染成0即可 #include<bits/stdc++.h> #define ll long long ...

  4. java读取HDFS压缩文件乱码

    java通过调用HDFS系统的FileSystem等API 直接读取HDFS的压缩文件会产生乱码 解决方法: 1.调用解码的API,解码后通过IO流处理. public static void mai ...

  5. 异常EXCEPTION_HIJACK(0xe0434f4e)

    简介 EXCEPTION_HIJACK,值为0xe0434f4e.意思是CLR线程劫持异常.异常劫持是CLR在挂起线程进行垃圾收集的过程中抛出的.它的抛出是为了帮助停止后恢复执行.它定义在..\clr ...

  6. 有这样一个url=http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段js程序提取url 中的各个get参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中, 如{a:'1',b:'2',c:'',d:'xxx',e:undefined}

    第一种方法: console.log(getJson(url)); function getJson(url){ var obj={}; var arr=url.split("?" ...

  7. Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins:mav问题

    1.导致问题原因:从装系统,从win7改到win10 由于重装了系统,打开eclipse时,maven验证会出错,点击pom文件,会发现有红色的Cannot read lifecycle mappin ...

  8. 去除批次效应 sva

    Surrogate Variable Analysis http://www.bioconductor.org/packages/release/bioc/html/sva.html

  9. csv文件处理

    读取csv文件 import csv with open('demo.csv', 'r') as fp: reader = csv.reader(fp) titles = next(reader) f ...

  10. Spring Security教程之整合SpringMVC(六)

    一.前言 Spring Security系列教程中,前五篇为同一人所写,而本文是博主依据第三方文章整合而出,与前五篇文章的作者不是同一系列. 但本文以前五篇文章为基础,在前面文章所建立的Spring ...