PKU 1105 S-Trees

http://poj.org/problem?id=1105
読解して実装する問題。

問題自体と実装がなんとなく楽しいと言えなくもないような気がします。

string in[10];

main(){
  int n;
  int st=0;
  while(cin>>n,n){
    printf("S-Tree #%d:\n",++st);
    rep(i,n)cin>>in[i];
    string tn;
    cin>>tn;
    int k;
    cin>>k;
    string ans;
    rep(i,k){
      string vva;
      cin>>vva;
      int s=0,t=1<<n;
      rep(j,n){
        if(vva[in[j][1]-'1']=='1')s=(s+t)/2;
        else t=(s+t)/2;
      }
      ans+=tn[s];
    }
    cout<<ans<<endl<<endl;
  }
}