递归 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;
}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值