简单模拟即可,注意xi输入的顺序,用一个数组记录从0~n依次是x多少。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int kcase = 1;
while(true){
int n = scan.nextInt();
if(n==0)break;
int[] index = new int[n];//记录xi
int all = (int)Math.pow(2,n+1);
int[] G = new int[all];//树
int cnt = 0;
for(int i=0;i<n;i++){
String str = scan.next();
index[cnt++] = str.charAt(1)-'0'-1;
}
String le = scan.next();
cnt = (int)Math.pow(2, n);
for(int i=0;i<le.length();i++){
G[cnt++] = le.charAt(i)-'0';
}
int m = scan.nextInt();
String ans = "";
for(int i=0;i<m;i++){
String str = scan.next();
cnt = 1;
for(int j=0;j<n;j++){
if(str.charAt(index[j])=='0'){//根据记录的index数组x的输入顺序,取出str相应位置的值
cnt = cnt*2;
}else{
cnt = cnt*2+1;
}
}
ans+=G[cnt];
}
System.out.printf("S-Tree #%d:\n",kcase++);
System.out.println(ans);
System.out.println();
}
}
}