题意感觉有点奇怪,直接贴代码了。。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=1000;
char str[N];
int map[N][N];
bool vis[N][N];
int dp(int,int);
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
scanf("%s",str);
int len=strlen(str);
int res=dp(0,len-1);
if(res==1) puts("SIMPLE");
else if(res==2) puts("FULLY-GROWN");
else if(res==3) puts("MUTAGENIC");
else puts("MUTANT");
}
return 0;
}
int dp(int x,int y)
{
bool &flag=vis[x][y];
int &res=map[x][y];
if(flag) return res;
else if(x>=y)
{
if(x==y&&str[x]=='A')res=1;
else res=0;
flag=1;
return res;
}
else
{
flag=1;
if(str[y]=='A'&&dp(x,y-1)!=0) res=1;
else if(str[y]=='B'&&str[y-1]=='A'&&dp(x,y-2)!=0) res=2;
else if(str[x]=='B'&&str[y]=='A'&&dp(x+1,y-1)!=0) res=3;
else res=0;
return res;
}
}