1145-The Genome Database of All Space Life
考え方
一文字ずつ読み進めていく。
ループがある場合は同じ文字を指定回数だけ読み進めれば良い。
実装(C++)
#include <iostream> using namespace std; int cnt=0; int tar; char ans; bool solve(string in){ string res; int L=in.size(); int i=0; while(i<L){ if(in[i]>='A'&&in[i]<='Z'){ i++; cnt++; if(cnt==tar){ ans=in[i-1];return true; } if(cnt>tar)return true; }else{ int t=0; while(in[i]>='0'&&in[i]<='9'){ t*=10;t+=in[i]-'0'; i++; } if(in[i]!='('){ for(int j=0;j<t;j++){ if(solve(in.substr(i,1)))return true; } i++; }else{ int dep=0,s=i; while(!(in[i]==')'&&dep==1)){ if(in[i]==')')dep--; if(in[i]=='(')dep++; i++; } for(int j=0;j<t;j++){ if(solve(in.substr(s+1,i-s-1)))return true; } i++; } } } return false; } int main() { string in;int m; for(;cin>>in>>m;){ if(in=="0")break; tar=m+1; cnt=0; ans='0'; solve(in); cout<<ans<<endl; } return 0; }