hdu 4414(文字の水題)

2266 ワード

http://acm.hdu.edu.cn/showproblem.php?pid=4414
十字架はいくつありますか?十字架の周りにはありません.
考え方:簡単な暴力で済む.
反省:このテーマは長い間やってきました.初めて書いたコードの中には二つの誤りがあります.一つは十字架が自分の中心となるものであるかどうかを判断していません.
#include
#include
using namespace std;
char s[60][60];
int n;
int main()
{
	while(scanf("%d",&n)>0)
	{
		if(n==0)
			break;
		int count=0,w1=0,w2=0;
		int i,j;
		for(i=0;i=0||i+a=n&&s[i-a][j]=='#')
								break;
							else
								if(s[i-a][j]!='#'||s[i+a][j]!='#')            //         
									break;
						else
							if(s[i+a][j]=='#'&&s[i-a][j]=='#')
							{
								if(s[i+a][j+1]=='#'||s[i+a][j-1]=='#')
									break;
								if(s[i-a][j+1]=='#'||s[i-a][j-1]=='#')
									break;
							}
							a++;
							if(i-a<0&&s[i+a][j]=='o')
								w1=1;
							else
							if(i+a>=n&&s[i-a][j]=='o')
								w1=1;
							else
							if(i+a>=n&&i-a<0)
								w1=1;
							else
							if(s[i-a][j]=='o'&&s[i+a][j]=='o')
								w1=1;
							
					}
					if((j-b>=0||j+b=n&&s[i][j-b]=='#')
								break;
							else
								if(s[i][j+b]!='#'||s[i][j-b]!='#')
									break;
						else
							if(s[i][j+b]=='#'&&s[i][j-b]=='#')
							{
								if(s[i+1][j+b]=='#'||s[i-1][j+b]=='#')
									break;
								if(s[i+1][j-b]=='#'||s[i-1][j-b]=='#')
									break;
							}
							b++;
							if(j-b<0&&s[i][j+b]=='o')
								w2=1;
							else
							if(j+b>=n&&s[i][j-b]=='o')
								w2=1;
							else
							if(j+b>=n&&j-b<0)
								w2=1;
							else
							if(s[i][j+b]=='o'&&s[i][j-b]=='o')
								w2=1;
							
					}
					if(w1==1&&w2==1)
						break;
				}
				if(a==b&&w1==1&&w2==1)
					count++;
			}
		}
	}
	printf("%d
",count); } return 0; }