UVA - 620 Cellular Structure

题目大意:给出一个细胞群, 判断该细胞的可能是由哪一种生长方式的到的, 输出该生长方式的最后一种生长种类, 

"SIMPLE" -----------------------由 空 生成 ‘A'
"FULLY-GROWN" ----------------在 原细胞群(不能为空)的后面 加上  ’AB'
MUTANT ----------------------在 原细胞群(不能为空)的前后分别加上  ‘A'  、 ’B'
MUTAGENIC ----------------------不可能得到。


解题思路:开辟两个迭代器, 从字符串的两边根据两种生长方式向中间缩进, 最后当a == b &&str[a] == 'A'即为可达到目标的生长方式。


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

int main() {
	int T;
	cin >> T;
	while (T--) {
		string s;
		cin >> s;
		int n = s.length(), cnt_B = 0, cnt_A = 0, flag = 0;
		if (n ==1 && s[0] == 'A') {
			cout << "SIMPLE\n";
			continue;
		}

		for (int i = 0; i < n; i++)
			if (s[i] == 'B')
				cnt_B++;
			else
				break;

		for (int i = cnt_B; i < n; i++)
			if (s[i] == 'A')
				cnt_B--;
			else { 
				cnt_B++;
				if (s[i-1] != 'A')
					flag = 1;
			}

		if (cnt_B != -1)
			flag = 1;

		if (flag) {
			cout << "MUTANT\n";
			continue;
		}

		if (s[n-1] == 'A')
			cout << "MUTAGENIC\n";
		else
			cout << "FULLY-GROWN\n";
	}
	return 0;
}


你可能感兴趣的:(UVA - 620 Cellular Structure)