UVA_620
话说真的不知道为什么这道题目会放在动规的分类里,只要递归判断就可以了。如果存在多个状态的话,要输出细胞成长最后一个的状态。
#include#include #define MAXD 100010 int N, max; char b[MAXD]; void dfs(int s, int t, int flag) { if(s == t) { if(b[s] == 'A') { if(flag) max = 1, flag = 0; } else max = 0; } else if(t - s >= 2) { if(b[t] == 'B' && b[t - 1] == 'A') { if(flag) max = 2, flag = 0; dfs(s, t - 2, flag); } else if(b[s] == 'B' && b[t] == 'A') { if(flag) max = 3, flag = 0; dfs(s + 1, t - 1, flag); } else max = 0; } else max = 0; } void solve() { int s, t; scanf("%s", b); max = 0; s = 0, t = strlen(b) - 1; dfs(s, t, 1); if(max == 0) printf("MUTANT\n"); else if(max == 1) printf("SIMPLE\n"); else if(max == 2) printf("FULLY-GROWN\n"); else printf("MUTAGENIC\n"); } int main() { while(scanf("%d", &N) == 1) { for(int i = 0; i < N; i ++) solve(); } return 0; }