#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
4
####
####
####
####
output
NO
input
6
.#....
####..
.####.
.#.##.
######
.#..#.
output
YES
input
6
.#..#.
######
.####.
.####.
######
.#..#.
output
NO
input
3
...
...
...
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;//听懂掌声
}
}