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.
![](http://espresso.codeforces.com/847cb0bb04204418c35604e1d8aa5a80be062087.png)
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
output
input
output
input
output
input
output
input
output
Note
In example 1, you can draw two crosses. The picture below shows what they look like.
![](http://espresso.codeforces.com/0d13c60e1d2c524d94d834706cc194f821b565f2.png)
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"结束,否则就令这几个’#‘都为'.',注意要对每个位置都进行判断、处理
代码如下:
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.
![](http://espresso.codeforces.com/847cb0bb04204418c35604e1d8aa5a80be062087.png)
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.
![](http://espresso.codeforces.com/0d13c60e1d2c524d94d834706cc194f821b565f2.png)
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; }
相关文章推荐
- Codeforces Round #228 (Div. 2) B Fox and Cross(DFS)
- Codeforces Round #228 (Div. 2)B. Fox and Cross
- Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation
- Codeforces Round #228 (Div. 2), problem: (A) Fox and Number Game
- Codeforces Round #228 Div1 B Fox and Minimal path
- Codeforces Round #228 (Div. 1) A. Fox and Box Accumulation 贪心
- Codeforces Round #228 (Div. 1) B. Fox and Minimal path
- Codeforces Round #228 (Div. 2) A. Fox and Number Game
- Codeforces Round #290 (Div. 1)B. Fox And Jumping
- Codeforces Round #290 (Div. 2) C. Fox And Names 拓扑排序
- C. Fox And Names Codeforces Round #290 (Div. 2)
- Codeforces Round #290 (Div. 2) E Fox And Dinner
- Codeforces Round #290 (Div. 2)-C. Fox And Names
- Codeforces Round #290 (Div. 2) C. Fox And Names dfs
- Codeforces #228 (Div. 2)C. Fox and Box Accumulation
- Codeforces Round #228 Fox and Card Game 解题报告
- Codeforces Round #290 (Div. 2) B. Fox And Two Dots
- Codeforces Round #290 (Div. 2) - C. Fox And Names (拓扑排序)
- Codeforces Round #290 (Div. 1) A. Fox And Names
- Codeforces Round #290 (Div. 2) D. Fox And Jumping dp