HDU 4260
简单递归
[cpp]
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char s[100];
int len;
long long dfs(int pos,char to){
if(pos==-1)
return 0;
if(to=='A'){
if(s[pos]==to)
return dfs(pos-1,to);
else if(s[pos]=='B')
return dfs(pos-1,'C')+(1LL<<pos);
else if(s[pos]=='C')
return dfs(pos-1,'B')+(1LL<<pos);
}
else if(to=='B'){
if(s[pos]==to)
return dfs(pos-1,to);
else if(s[pos]=='A')
return dfs(pos-1,'C')+(1LL<<pos);
else if(s[pos]=='C')
return dfs(pos-1,'A')+(1LL<<pos);
}
else{
if(s[pos]==to)
return dfs(pos-1,to);
else if(s[pos]=='A')
return dfs(pos-1,'B')+(1LL<<pos);
else if(s[pos]=='B')
return dfs(pos-1,'A')+(1LL<<pos);
}
}
int main(){
while(scanf("%s",s)!=EOF){
if(s[0]=='X')break;
len=strlen(s);
printf("%I64d\n",dfs(len-1,'B'));
}
}
补充:软件开发 , C++ ,