题意
传送门 POJ 1105
题解
模拟选取左右子树的过程即可。
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 8
int n, m, id[maxn], x[maxn], node[1 << maxn];
int f()
{
int l = 0, r = 1 << n;
for (int i = 0; i < n; i++)
{
int m = l + (r - l) / 2;
if (x[id[i]])
l = m;
else
r = m;
}
return node[l];
}
int main()
{
int t = 1;
while (~scanf("%d", &n) && n)
{
printf("S-Tree #%d:\n", t++);
for (int i = 0; i < n; i++)
{
char str[5];
scanf(" %s", str);
id[i] = str[1] - '1';
}
char nd[(1 << maxn) + 1];
scanf(" %s", nd);
for (int i = 0; i < (1 << n); i++)
{
node[i] = nd[i] - '0';
}
scanf("%d", &m);
while (m--)
{
char str[10];
scanf(" %s", str);
for (int i = 0; i < n; i++)
{
x[i] = str[i] - '0';
}
printf("%d", f());
}
printf("\n\n");
}
}