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;
}