您的位置:首页 > 其它

Codeforces Round #228 (Div. 2) B. Fox and Cross

2014-02-04 01:32 573 查看
B. Fox and Cross

time limit per test
1 second

memory limit per test
256 megabytes

input
standard input

output
standard output

Fox Ciel has a board with n rows and n columns. So,
the board consists of n × n cells. Each cell contains either a symbol '.',
or a symbol '#'.

A cross on the board is a connected set of exactly five cells of the board that looks like a cross. The picture below shows how it looks.



Ciel wants to draw several (may be zero) crosses on the board. Each cross must cover exactly five cells with symbols '#', and any cell with symbol '#'
must belong to some cross. No two crosses can share a cell.

Please, tell Ciel if she can draw the crosses in the described way.

Input

The first line contains an integer n (3 ≤ n ≤ 100)
— the size of the board.

Each of the next n lines describes one row of the board. The i-th
line describes the i-th row of the board and consists of n characters.
Each character is either a symbol '.', or a symbol '#'.

Output

Output a single line with "YES" if Ciel can draw the crosses in the described way. Otherwise output a single line with "NO".

Sample test(s)

input
5
.#...
####.
.####
...#.
.....


output
YES


input
4
####
####
####
####


output
NO


input
6
.#....
####..
.####.
.#.##.
######
.#..#.


output
YES


input
6
.#..#.
######
.####.
.####.
######
.#..#.


output
NO


input
3
...
...
...


output
YES


Note

In example 1, you can draw two crosses. The picture below shows what they look like.



In example 2, the board contains 16 cells with '#', but each cross contains 5. Since 16 is not a multiple of 5, so it's impossible to cover all.

这一题也是比较简单的,就是两层循环判断即可,没遇到一个‘#’就判断周围的'#'是否满足十字条件,若不满足,输出"NO"结束,否则就令这几个’#‘都为'.',注意要对每个位置都进行判断、处理

代码如下:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#define maxn 110
using namespace std;

char a[maxn][maxn];

int main(void){
int n;
while(cin >> n){
for(int i=0; i<n; ++i)
for(int j=0; j<n; ++j)
cin >> a[i][j];
for(int i=0; i<n-2; ++i)
for(int j=1; j<n-1; ++j){
if(a[i][j] == '#'){
if(a[i+1][j]=='#' && a[i+2][j]=='#' && a[i+1][j-1]=='#' && a[i+1][j+1]=='#'){
a[i][j]='.';
a[i+1][j]='.';
a[i+2][j]='.';
a[i+1][j-1]='.';
a[i+1][j+1]='.';
}
else{
cout << "NO" << endl;
return 0;
}
}
}
for(int i=0; i<n; ++i)
if(a[i][0]=='#' || a[i][n-1]=='#'){
cout << "NO" << endl;
return 0;
}
for(int j=1; j<n-1; ++j)
if(a[n-2][j]=='#' || a[n-1][j]=='#'){
cout << "NO" << endl;
return 0;
}
cout << "YES" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: