递归 uva-620-Cellular Structure

 

题目链接:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=561

 

题目大意:

细胞正常分类有三种情况。

1.simple stage                 OA     //O代表着健康的细胞分类形式,这表示正在进行simple stage阶段。

2.fully-grown stage          OAB  //O代表着健康的细胞分类形式,这表示正在进行fully-grown stage阶段。

3.mutagenic stage           BOA //O代表着健康的细胞分类形式, 这表示正在进行mutagenic stage阶段。

给一个序列,让你求出当前细胞正在进行的阶段。如果不是前面三种情况则说明细胞已经变异了,则输出变异阶段。

如果同时存在两种阶段,则按上面顺序输出排在最上面的一种。

 

解题思路:

对当前序列,依次按上面三种阶段试探,当都不满足时,说明细胞已经变异了。

 

代码:

#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;
}


 

 

你可能感兴趣的:(递归 uva-620-Cellular Structure)