UVA 620
UVA 620
题意:
= =看了挺久的题
大概是问一个细胞链现在是什么状态。= =
SIMPLE 由一个空的在右边加一个A (每种细胞链都由'A'开始生长)
FULLY-GROWN 一个不是空原细胞链右边加AB
MUTAGENIC 不是空的细胞链左边加B,右边加A
MUTANT 其他的情况
解题:
从字符串两端开始搜索,每种情况都搜索一遍,如果三种情况都不能找到,那么就是其他情况了。
如果最后(l==r)了并且字符是'A' (也就是能够回到最原始的状态)符合就可以输出辣~
#include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 1010; const int INF = 0x3f3f3f3f; char s[maxn]; int dfs(int l, int r) { if(l == r && s[l] == 'A') return 1; if( s[r-1] == 'A' && s[r] == 'B' ) { if (dfs(l, r-2)) return 2; } if(s[l] == 'B' && s[r] == 'A') { if (dfs (l+1, r-1)) return 3; } else return 0; } int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int t; scanf ("%d", &t); while (t -- ) { scanf ("%s", s); int len = strlen(s) - 1; int ans = dfs(0, len); switch(ans) { case 1: cout << "SIMPLE\n"; break; case 2: cout << "FULLY-GROWN\n"; break; case 3: cout << "MUTAGENIC\n"; break; default : cout << "MUTANT\n"; break; } } return 0; }