AOJ 0139 - Snakes

普通に解いた.

#include <iostream>

//任意文字を消し全て消えてるか調べる関数
int clear(std::string s, std::string f){
	int pos;
	while(pos = s.find(f), pos != std::string::npos)
		s.replace(pos,f.size(),"");
	if(s == "")return 1;
	return 0;
}

int main(){
	int n;
	std::cin >> n;
	while(n--){
		std::string sn, st, res = "";
		std::cin >> sn;

		//Type A
		//頭が>',尻尾が~,かつお腹が奇数である
		if(sn.substr(0,2) == ">'" &&
			 sn[sn.size()-1] == '~' && (sn.size()-3) % 2 == 1){
			st = sn.substr(2,sn.size()-3);
			//お腹の真ん中が#
			if(st[st.size()/2] == '#'){
				st.replace(st.size()/2,1,"");
				
				//#以外がすべて=
				if(st != "")
					if(clear(st,"="))res = "A\n";
			}
		}

		//Type B
		//頭が>~,尻尾が~~,かつお腹が偶数である
		if(sn.substr(0,2) == ">^" &&
			 sn.substr(sn.size()-2,2) == "~~" &&
			 (sn.size()-4) % 2 == 0){
			st = sn.substr(2,sn.size()-4);
			if(st != "")
				if(clear(st,"Q="))res = "B\n";
		}

		if(res == "")res = "NA\n";
		std::cout << res;
	}
}