712 - S-Trees

Problem.png

题目给出了叶子的值和每一层的取值,因此可以不用建树,直接模拟二分查找的过程即可。二分查找本质上也是构造了一棵搜索树。

#include <iostream>
#include <string>
#include <vector>
#include <cstdio>

using namespace std;

int main() {
    int n;
    int t = 1;
    while (cin >> n && n) {
        getchar();
        printf("S-Tree #%d:\n", t++);
        string order;
        getline(cin, order);
        vector<int> seq;
        for (int i = 0; i < order.length(); i++) {
            if (order[i] >= '0' && order[i] <= '9')
                seq.push_back(order[i] - '0');
        }
        string leaf;
        cin >> leaf;
        int m;
        cin >> m;
        for (int i = 0; i < m; i++) {
            string vva;
            cin >> vva;
            int low = 0, high = (1 << n) - 1;
            int mid = 0;
            for (int j = 0; j < seq.size(); j++) {
                if (vva[seq[j] - 1] == '0') {
                    // 等于0,取左边一半
                    mid = low + (high - low) / 2;
                    high = mid;
                }
                else {
                    // 等于1,取右边一半
                    mid = low + (high - low) / 2 + 1;
                    low = mid;
                }
            }
            cout << leaf[mid];
        }
        cout << endl << endl;
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,355评论 0 25
  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 9,222评论 0 7
  • 原文链接 B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(...
    非典型程序员阅读 1,188评论 0 3
  • B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balan...
    铁甲依然在_978f阅读 1,466评论 0 4
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,172评论 0 12