0139 - Snakes

#include <iostream>
#include <string>
using namespace std;

int Check_A(string snake)	{
	int first=0, second=0, i, j;

	for (i=2; i<snake.length(); ++i)	{
		if (snake[i] != '=')	break;
		++first;
	}
	for (j=i+1; j<snake.length(); ++j)	{
		if (snake[j] != '=')	break;
		++second;
	}
	if (first!=0 && first==second && snake[i]=='#' && snake[j]=='~' && snake[j+1]=='\0')	return 1;
	return 0;
}

int Check_B(string snake)	{
	int k;

	for (k=2; k<snake.length(); k+=2)
		if (snake[k]!='Q' || snake[k+1]!='=')	break;
	if (k>2 && snake[k]=='~' && snake[k+1]=='~' && snake[k+2]=='\0')	return 2;
	return 0;
}

void Slove(int n)	{
	const string kind[3]={"NA", "A", "B"};
	string snake;
	
	for (int i=0; i<n; ++i)	{
		cin >> snake;
		int flg=0;
		if (snake[0]=='>' && snake[1]=='\'')	flg=Check_A(snake);
		else if (snake[0]=='>' && snake[1]=='^')	flg=Check_B(snake);
		cout << kind[flg] << endl;
	}
}

int main(void)	{
	int n;

	cin >> n;
	Slove(n);
	return 0;
}

先ず、最初の2文字で場合分け。
次は各々詳細に調べ、答えを出力。
~了~