微生物細胞鏈由 A、B 兩類細胞組成。健康生物的生長遵循三種規則:
給定一條細胞鏈,判斷其處於哪個階段(優先級:SIMPLE > FULLY-GROWN > MUTAGENIC > MUTANT)。
觀察生長規則:每次操作增加的長度為 1 或 2。從最終字符串反推:
#include
using namespace std;
int main() {
int T; cin >> T;
while (T--) {
string s; cin >> s;
int len = s.length();
if (len == 1) { cout << "SIMPLE\n"; continue; }
if (len % 2 == 0) { cout << "MUTANT\n"; continue; }
int l = 0, r = len - 1;
int lastRule = 0; // 1=SIMPLE, 2=FULLY-GROWN, 3=MUTAGENIC
bool ok = true;
while (l < r) {
if (s[r] == 'B') { // 可能是 FULLY-GROWN 添加的 AB
if (s[r-1] != 'A') { ok = false; break; }
lastRule = 2;
r -= 2;
} else { // s[r] == 'A',可能是 MUTAGENIC 添加的 BA
if (s[l] != 'B') { ok = false; break; }
lastRule = 3;
++l; --r;
}
}
if (!ok || l != r || s[l] != 'A') cout << "MUTANT\n";
else if (lastRule == 2) cout << "FULLY-GROWN\n";
else if (lastRule == 3) cout << "MUTAGENIC\n";
else cout << "MUTANT\n";
}
return 0;
}
本題通過逆向模擬生長過程,利用字符串兩端字符特徵快速判斷。注意優先級規則:若同時滿足多個階段,輸出優先級最高者(SIMPLE > FULLY-GROWN > MUTAGENIC)。