递归 uva-620-Cellular Structure
题目大意:细胞正常分类有三种情况。
1.易做图 stage OA //O代表着健康的细胞分类形式,这表示正在进行易做图 stage阶段。
2.fully-grown stage OAB //O代表着健康的细胞分类形式,这表示正在进行fully-grown stage阶段。
3.mutagenic stage BOA //O代表着健康的细胞分类形式, 这表示正在进行mutagenic stage阶段。
给一个序列,让你求出当前细胞正在进行的阶段。如果不是前面三种情况则说明细胞已经变异了,则输出变异阶段。
如果同时存在两种阶段,则按上面顺序输出排在最上面的一种。
解题思路:
对当前序列,依次按上面三种阶段试探,当都不满足时,说明细胞已经变异了。
代码:
[cpp]
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<stack>
#include<queue>
#define eps 1e-6
#define INF (1<<20)
#define PI acos(-1.0)
using namespace std;
char save[1200];
int dfs(int begin,int end) //1 代表第一种类型,2代表第二种类型,3代表第三种类型,0代表其他类型
{
if(begin==end&&save[begin]=='A') //如果只有一个A,正在进行第一阶段
return 1;
if(end-begin>=1&&save[end]=='A'&&dfs(begin,end-1)) //判断是否满足第一阶段
return 1;
if(end-begin>=2&&save[end]=='B'&&save[end-1]=='A'&&dfs(begin,end-2)) //判断是否满足第二阶段
return 2;
if(end-begin>=2&&save[begin]=='B'&&save[end]=='A'&&dfs(begin+1,end-1)) //判断是否满足第三阶段
return 3;
return 0;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",save);
int len=strlen(save);
int ans=dfs(0,len-1);
switch(ans)
{
case 0:printf("MUTANT\n");break;
case 1:printf("SIMPLE\n");break;
case 2:printf("FULLY-GROWN\n");break;
case 3:printf("MUTAGENIC\n");break;
};
}
return 0;
}
补充:软件开发 , C++ ,