#228(div2)B. Fox and Cross
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".
Examples
input
5 .#... ####. .#### ...#. .....
output
YES
input
1. 4 2. #### 3. #### 4. #### 5. ####
output
NO
input
1. 6 2. .#.... 3. ####.. 4. .####. 5. .#.##. 6. ###### 7. .#..#.
output
YES
input
1. 6 2. .#..#. 3. ###### 4. .####. 5. .####. 6. ###### 7. .#..#.
output
NO
input
1. 3 2. ... 3. ... 4. ...
output
YES 翻译 Fox Ciel 有一个有 n 行 n 列的板。因此,该板由 n × n 个单元组成。每个单元格包含一个符号“.”或一个符号“#”。 棋盘上的十字架是棋盘上正好五个单元格的连接集合,看起来像一个十字架。下图显示了它的外观。 Ciel 想在黑板上画几个(可能是零)个十字。每个十字必须正好覆盖五个带有符号“#”的单元格,并且任何带有符号“#”的单元格都必须属于某个十字。没有两个十字架可以共享一个单元格。 请告诉夏尔她是否可以按照描述的方式画十字。 输入 第一行包含一个整数 n (3 ≤ n ≤ 100)——棋盘的大小。 接下来的 n 行中的每一行都描述了棋盘的一行。第 i 行描述了棋盘的第 i 行,由 n 个字符组成。每个字符要么是一个符号“.”,要么是一个符号“#”。 输出 如果 Ciel 可以按照描述的方式绘制十字,则输出一行带有“YES”的内容。否则输出一行“NO”。
额,就是说看能不能形成十字架,但是不能重复利用,水题一道;
上ac代码。
有事你就q我;QQ2917366383
学习算法
#include<bits/stdc++.h> using namespace std; int sum=0; char s[110][110]; int main() { int n;cin>>n; for(int i=1;i<=n;i++) { scanf("%s",s[i]+1); for(int j=1;j<=n;j++) if(s[i][j]=='#')sum++; } if(sum%5!=0) cout<<"NO"<<endl; else { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if( s[i][j]=='#')//亲,要注意这个哦,这是必要条件 { if(s[i+1][j]=='#'&&s[i+2][j]=='#'&&s[i+1][j-1]=='#'&&s[i+1][j+1]=='#') { s[i+1][j]='.';s[i+2][j]='.';s[i+1][j-1]='.';s[i+1][j+1]='.'; s[i][j]='.'; } else { cout<<"NO"<<endl; return 0; } } } } cout<<"YES"<<endl;//听懂掌声 } }