UVa 620 - Cellular Structure

/*
初始化细胞为A(SIMPLE),细胞生长方式有3种
1)右边加AB(FULLY-GROWN)
2) 左边加B,右边加A(MUTAGENIC)
3)变异生长,细胞序列不确定(MUTANT)
个人理解:
1)一旦细胞变异生长,细胞的状态就一直是变异状态
2)细胞的生长方式会变化
算法:
1) 如果序列为A,当前状态为SIMPLE
2) 如果序列为xxxAB, 如果xxx的状态为非MUTANT,则当前状态为FULLY-GROWN,否则为MUTANT
3) 如果序列为BxxxA, 如果xxx的状态为非MUTANT,则当前状态为MUTAGENIC,否则为MUTANT
4) 其他序列为MUTANT
ps: 当细胞数为偶数,必然为MUTANT
*/
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
char st[4][20] = {"SIMPLE", "FULLY-GROWN", "MUTAGENIC", "MUTANT"};
char A[1000];

int dp(int x, int y) {
    if(y-x == 1) {
        return A[x]=='A' ? 0 : 3;
    }
    if(A[y-1]=='B' && A[y-2]=='A') return dp(x, y-2)==3 ? 3 : 1;
    if(A[x]=='B' && A[y-1]=='A')  return dp(x+1, y-1)==3 ? 3 : 2;
    return 3;
}

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    #endif
    int n, ans;
    scanf("%d", &n);
    for(int i=0; i<n; i++) {
        scanf("%s", A);
        int len = strlen(A);
        if(!len%2) ans = 3;
        else {
            ans = dp(0, len);
        }
        printf("%s\n", st[ans]);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值