題目大意: 細胞正常分類有三種情況。 1.simple stage OA //O代表著健康的細胞分類形式,這表示正在進行simple 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; }