1、题目链接:http://codeforces.com/problemset/problem/389/B
2、暴力枚举即可,注意两个十字架不能分享同一个阴影格!
#include<cstdio>
using namespace std;
char a[110][110];
int n;
bool f[110][110];
bool in(int i,int j){
if(i>=0&&i<n&&j>=0&&j<n&&a[i][j]=='#'&&f[i][j]==false) return true;
else return false;
}
bool is_valid(int i,int j){
if(in(i-1,j)&&in(i+1,j)&&in(i,j-1)&&in(i,j+1)&&a[i][j]=='#')
return true;
return false;
}
void color(int i,int j){
f[i][j]=f[i-1][j]=f[i+1][j]=f[i][j-1]=f[i][j+1]=true;
return;
}
bool judge(){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(!f[i][j]) return false;
return true;
}
int main(){
//freopen("B.in","r",stdin);
scanf("%d\n",&n);
for(int i=0;i<n;i++)
scanf("%s",a[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[i][j]=='#') f[i][j]=false;
else f[i][j]=true;
for(int i=1;i<n-1;i++)
for(int j=1;j<n-1;j++)
if(is_valid(i,j)) color(i,j);
if(judge()) printf("YES\n");
else printf("NO\n");
return 0;
}