uva 712

水题一道,没有用到特别的方法。

根据 000,010,111,110 这些二进制数字转化为十进制得知该查询是哪一个叶子节点的值。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

const int maxn = 10+2;
int n,m;
int label[maxn];
int order[maxn];
int res[1<<maxn];
string ans;

int main(){
    int k = 1;
    while(cin>>n && n!=0){
        memset(label,0,sizeof(label));
        memset(res,-1,sizeof(res));
        ans = "";
        string str;
        for(int i=1;i<=n;i++){
            cin >> str;
            label[i] = str[1] - ‘0‘;
        }

        cin >> str;
        for(int j=0;j<(1<<n);j++){
            res[j] = str[j] - ‘0‘;
        }
        cin >> m;
        while(m--){
            cin >> str;
            int cnt = 0;
            for(int i=1;i<=n;i++){
                order[i] = str[label[i]-1] - ‘0‘;
            }
            /*
            cout<<"label:"<<"  ";
            for(int i=1;i<=n;i++){
                cout << label[i] << "  ";
            }
            cout<<"order:"<<"  ";
            for(int i=1;i<=n;i++){
                cout << order[i] <<"  ";
            }
            */

            for(int i=1;i<=n;i++){
                cnt = cnt*2+order[i];
            }
            ans += res[cnt] + ‘0‘;
        }
        //cout<<"S-Tree #1:"<<endl;
        printf("S-Tree #%d:\n",k);k++;
        cout<<ans;
        cout<<"\n\n";
    }
    return 0;
}
时间: 2024-11-20 21:34:17

uva 712的相关文章

UVA 712(二叉树模拟)

L - S-Trees Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Appoint description:  System Crawler  (2014-04-01) Description  S-Trees  A Strange Tree (S-tree) over the variable set  is a binary tree representing a B

S-Tree (UVa 712) 二叉树

题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=839&page=show_problem&problem=653 思路:当前结点为k,左走则 2k,右走则 2k + 1,得到最后的点,减去前面n层的所有结点,得到的下标对应的0或1就是答案. /* S-Tree (UVa 712) */ #include <iostream> #include &

UVa 712 - S-Trees

题目:给你一棵全然二叉树,再给你一个xi1~xin-1的序列,相应从根到叶子上一层. 每层相应一个xi,叶子是0或1,如今给你一些路径,输出路径相应的叶子的值: 路径是01串.从更開始往下走,0表示左子树,1表示右子树,相应x1~xn-1的顺序. 分析:模拟. 直接安找路径走过去就好了,由于是二叉树,正好相应二进制数. 注意:路径的顺序要调整到和树一样在计算. #include <algorithm> #include <iostream> #include <cstdlib

UVA - 712 S-Trees(S树)

题意:0往左走,1往右走,已知所有叶子的值,每个查询都是根结点到叶子结点的路径,路径的每一个点分别对应着x1,x2,x3--但是实际上的S树的路径可能并非是x1,x2,x3-- 分析:先存路径变量的顺序,来控制最后访问的顺序. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<cstdlib> #incl

UVa 712 S树

题意:有一棵完全二叉树,每层元素有同一变量表示,从上到下分别为x1,x2,... 最后一层叶子结点会有0或1的赋值,输入给出.然后如果xi取值为0时,则往左子树走,否则往右子树走,直到走到叶子结点,得到一值. 思路:因为是完全二叉树,可以用顺序存储,数组实现即可.另外也只需存叶子结点的值就行了.对一结点k来说,左孩子是2k,右孩子是2k+1.因为高度最大为7,最多有x7,所以可以直接取数组的第二位,即下标1,来获得xk中的k. 注意:每个测试样例后有个空行,WA了一次~ 二维数组作形参: 一是

【UVa 712】S-Trees

S-Trees Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A Strange Tree (S-tree) over the variable set  is a binary tree representing a Boolean function . Each path of the S-tree begins at the root n

S-Trees UVA 712

说说: 先来说一下题意,题意感觉挺难描述的.有如下这样一棵树: 每一层都有一个变量描述,如左树,从根节点到倒数第二层为x1,x2,x3,而右树为x3,x1,x2,这在开始的时候会给定的.然后题目也会给你从左到右叶子节点所代表的数值,只可能是0或1.最后,会给你一串01数字,代表的是x1,x2,x3...的数值.相当于告诉你从树的根到叶子节点行走的路径.比如右树,从根到倒数第二层的变量依次为x3,x1,x2,如果题目给你它们的值为110(这是按顺序的,即x1=1,x2=1,x3=0).那么我们的行

二叉树基础练习

前序遍历(先根遍历):根,左子树,右子树 中序遍历:左子树,根,右子树后序遍历:左子树,右子树,根 先序遍历:ABDECF 中序遍历:DBEAFC 后序遍历:DEBFCA 层次遍历:ABCDEF UVA 112  Tree Summing 题目:给你一个数和一棵树,问是否存在根到叶子的路径使得路径上的数字和与已知数相等. 注意数据中可能有负数 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #i

【例 7-12 UVA - 1343】The Rotation Game

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 每次抽动操作最多只会让中间那一块的区域离目标的"距离"减少1. 以这个作为剪枝. 枚举最大深度. 就能过了. [代码] #include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> using namespace s