有点编译原理的感觉
正则表达式:O->A|OAB|BOA
上面三个最终状态分别有个名字,不能从上面表达式推出来的话就是MUTANT
于是判断字符串能否用该正则表达式推出来,推出来的情况下特判下属于哪个终态
#include<stdio.h>
#include<string.h>
#define MAXN 1005
char s[MAXN];
int dfs(int l,int r)
{
if(l==r)
{
if(s[l]=='A') return 1;
else return 0;
}
if(l>r) return 0;
if(l!=r&&s[r]=='B'&&s[r-1]=='A')
return dfs(l,r-2);
else if(s[l]=='B'&&s[r]=='A')
return dfs(l+1,r-1);
else return 0;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",s);
int len=strlen(s);
if(strcmp(s,"A")==0) printf("SIMPLE\n");
else
{
if(dfs(0,len-1))
{
if(s[len-1]=='B'&&s[len-2]=='A') printf("FULLY-GROWN\n");
else printf("MUTAGENIC\n");
}
else printf("MUTANT\n");
}
}
return 0;
}