UVA 620 Cellular Structure(dfs)

来源:互联网 发布:jsp个人博客系统源码 编辑:程序博客网 时间:2024/05/16 09:33

这题真的很难理解,看了别人的解析才明白是在讲什么,其实做起来不算难。

题目大意:
给定一个细胞链,只有AB两种字母组成。
有三种方式,一种是从物到有生成A,一种是在原有的基础上,加上AB,一种是B+原有的字符串+A,O代表是正常的细胞链,最后看一下这个细胞链是否是由这些组合构成的,输出最后的操作。如果不是这三种方式中的一种,那么该细胞链已变异,作为第四种输出。

解析:
不算dp,直接dfs就好了。从外向内dfs,看中间的那个是否为A,如果为A就ok,否则就变异,如果ok就对字符串,进行判断,是上面三种中的哪一种情况。

#include <cstdio>#include <cstring>using namespace std;const int N = 1000;char cells[N];bool ok;void dfs(int l,int r) {if(l == r-1) {return;}if(l == r) {if(cells[l] == 'A') {ok = true;}return ;}if(cells[l] == 'B' && cells[r] == 'A') {dfs(l+1,r-1);}if(cells[r-1] == 'A' && cells[r] == 'B') {dfs(l,r-2);}}int main() {int T;scanf("%d",&T);while(T--) {scanf("%s",cells);int len = strlen(cells);ok = false;dfs(0,len-1);if(!ok) {printf("MUTANT\n");}else {if(len == 1 && cells[0] == 'A') {printf("SIMPLE\n");}else if(cells[0] == 'B' && cells[len-1] == 'A'){printf("MUTAGENIC\n");}else if(cells[len-2] == 'A' && cells[len-1] == 'B') {printf("FULLY-GROWN\n");}}}return 0;}


0 0