6-2 S树 uva712

这题关键是  反转    查询是固定按照x1x2x3来的   那么先收集前面的顺序  然后在数组里面直接调用即可

比如前面的树是 x3 x1 x2  就把这个当作数组下标

最左边的树是 1<<n

左结点 2k  右节点 2k+1

#include<iostream>
#include<string>
using namespace std;

const int maxn = 10;
int n, v[maxn];//映射表
string leaves;

int solve(const string& q) {
  int u = 1;
  for(int i = 0; i < n; i++) {
    if(q[v[i]] == '0') u *= 2; else u = u*2+1;
  }
  return leaves[u-(1<<n)] - '0';
}

int main() {
  int kase = 0;
  while(cin >> n && n) {
    string s;
    cout << "S-Tree #" << ++kase << ":\n";
    for(int i = 0; i < n; i++) { cin >> s; v[i] = s[1] - '1'; }
    int m;
    cin >> leaves >> m;
    while(m--) {
      string q;
      cin >> q;
      cout << solve(q);
    }
    cout << "\n\n";
  }
  return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/bxd123/p/10317749.html
6-2