AOJ_0139 Snakes

PKUが死んでた
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0139

解法
地道にチェックするコードを書く
もっとスマートにできないかなぁ。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

char s[250];

bool cA(){
	int l = 0, i;
	for(i = 2; ; i++){
		if(s[i] == '=')
			l++;
		else if(s[i] == '#')
			break;
		else
			return false;
	}
	if(l == 0) return false;
	for(i = i + 1; ; i++){
		if(s[i] == '=')
			l--;
		else if(s[i] == '~'){
			if(s[i + 1] == 0 && l == 0)
				return true;
			else
				return false;
		}else
			return false;
	}
	return false;
}
bool cB(){
	int i; bool f = false;
	for(int i = 2; ; i+=2){
		if(!(s[i] == 'Q' && s[i + 1] == '=')){
			if(s[i] == '~' && s[i + 1] == '~' && s[i + 2] == 0)
				return f;
			else return false;
		}
		f = true;
	}
}
int main(){
	int n;
	char ch;
	scanf("%d", &n);
	for(int c = 0; c < n; c++){
		scanf("%s", s);
		scanf("%c", &ch);
		if(s[0] == '>' && s[1] == '\''){
			if(cA()){
				printf("A\n");
				continue;
			}
		}
		if(s[0] == '>' && s[1] == '^'){
			if(cB()){
				printf("B\n");
				continue;
			}
		}
		printf("NA\n");
	}
	return 0;
}