大水题。本题找到解法就好做了。
以下是我本人的一种思路,我觉得挺偏的,但是很简单。原题就不再赘述。
比如叶子是uva中的“00000111”
对于查询 “000”“010”“111”“110”
转化为十进制,就是在叶子中的变量的值;
0, 2, 7, 6 对应的 输出就是 “0011”。
仔细想一下,也就这么回事。
//S-Trees
#include <iostream>
#include <string>
using namespace std;
//方便求每个查询的十进制。
const int bin[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};
int main()
{
int kase = 1;
int number;
while(cin >> number)
{
if(number == 0)
break;
string t1, t, s;
int num;
//每个 Xn 变量以我的思路来说都没用。
//这里只是输入。
for(int j = 0; j < number; j++)
cin >> t1;
cin >> t;
int n;
cin >> n;
cout << "S-Tree #" << kase++ << ":" << endl;
for(int i = 0; i < n; i++)
{
cin >> s;
num = 0;
//对于每个查询转化为十进制,然后直接查询在叶子中的值,输出。
for(int j = 0; j < s.length(); j++)
{
num += bin[s.length()-j-1] * (s[j] - '0');
}
cout << t[num];
}
cout << endl << endl;
}
return 0;
}