cf B George and Cards
题意:给你一个只有‘.’和'#'的n*n的格子,问所有的'#'是不是只属于一个十字叉,如果不是输出NO,否则输出YES。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int n; 7 char g[200][200]; 8 bool vis[200][200]; 9 10 int main() 11 { 12 scanf("%d",&n); 13 for(int i=1; i<=n; i++) 14 { 15 scanf("%s",g[i]); 16 } 17 for(int i=1; i<=n; i++) 18 { 19 for(int j=0; j<n; j++) 20 { 21 if(g[i][j]=='#') 22 { 23 bool flag=false; 24 if(g[i+1][j-1]=='#'&&g[i+1][j]=='#'&&g[i+1][j+1]=='#'&&g[i+2][j]=='#'&&i+2<=n&&j-1>=0) 25 { 26 flag=true; 27 g[i+1][j-1]='.'; 28 g[i+1][j]='.'; 29 g[i+1][j+1]='.'; 30 g[i+2][j]='.'; 31 g[i][j]='.'; 32 } 33 else if(g[i+1][j+1]=='#'&&g[i][j+1]=='#'&&g[i][j+2]=='#'&&g[i-1][j+1]=='#'&&j+2<n&&i+1<=n&&i-1>=1) 34 { 35 flag=true; 36 g[i+1][j+1]='.'; 37 g[i][j+1]='.'; 38 g[i][j+2]='.'; 39 g[i-1][j+1]='.'; 40 g[i][j]='.'; 41 } 42 else if(g[i-1][j]=='#'&&g[i+1][j]=='#'&&g[i][j-1]=='#'&&g[i][j+1]=='#'&&j-1>=0&&i+1<=n&&i-1>=1&&j+1<n) 43 { 44 flag=true; 45 g[i-1][j]='.'; 46 g[i+1][j]='.'; 47 g[i][j-1]='.'; 48 g[i][j+1]='.'; 49 g[i][j]='.'; 50 } 51 else if(g[i-1][j]=='#'&&g[i-2][j]=='#'&&g[i-1][j-1]=='#'&&g[i-1][j+1]=='#'&&j-1>=0&&i+1<=n&&i-2>=1&&j+1<n) 52 { 53 flag=true; 54 g[i-1][j]='.'; 55 g[i-2][j]='.'; 56 g[i-1][j-1]='.'; 57 g[i-1][j+1]='.'; 58 g[i][j]='.'; 59 } 60 else if(g[i][j-1]=='#'&&g[i][j-2]=='#'&&g[i-1][j-1]=='#'&&g[i+1][j-1]=='#'&&j-2>=0&&i+1<=n&&i-1>=1&&j+1<n) 61 { 62 flag=true; 63 g[i][j-1]='.'; 64 g[i][j-2]='.'; 65 g[i-1][j-1]='.'; 66 g[i+1][j-1]='.'; 67 g[i][j]='.'; 68 } 69 if(!flag) 70 { 71 printf("NO\n"); 72 return 0; 73 } 74 } 75 } 76 } 77 printf("YES\n"); 78 return 0; 79 }