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

来源:互联网 发布:好听的傣族网络歌曲 编辑:程序博客网 时间:2024/05/16 17:27
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 110using 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;}


0 0
原创粉丝点击