S-Trees UVA - 712
A Strange Tree (S-tree) over the variable set Xn = {x1,x2,...,xn} is a binary tree representing a Boolean function f : {0,1}n → {0,1}. Each path of the S-tree begins at the root node and consists of n + 1 nodes. Each of the S-tree’s nodes has a depth, which is the amount of nodes between itself and the root (so the root has depth 0). The nodes with depth less than n are called non-terminal nodes. All non-terminal nodes have two children: the right child and the left child. Each non-terminal node is marked with some variable xi from the variable set Xn. All non-terminal nodes with the same depth are marked with the same variable, and non-terminal nodes with different depth are marked with different variables. So, there is a unique variable xi1 corresponding to the root, a unique variable xi2 corresponding to the nodes with depth 1, and so on. The sequence of the variables xi1, xi2, ..., xi**n is called the variable ordering. The nodes having depth n are called terminal nodes. They have no children and are marked with either 0 or 1. Note that the variable ordering and the distribution of 0’s and 1’s on terminal nodes are sufficient to completely describe an S-tree.
As stated earlier, each S-tree represents a Boolean function f. If you have an S-tree and values for the variables x1, x2, ..., xn, then it is quite simple to find out what f(x1,x2,...,xn) is: start with the root. Now repeat the following: if the node you are at is labelled with a variable xi, then depending on whether the value of the variable is 1 or 0, you go its right or left child, respectively. Once you reach a terminal node, its label gives the value of the function.
Figure 1: S-trees for the function x1∧ (x2∨ x3)
On the picture, two S-trees representing the same Boolean function, f(x1,x2,x3) = x1∧ (x2∨ x3), are shown. For the left tree, the variable ordering is x1,x2,x3, and for the right tree it is x3,x1,x2.
The values of the variables x1, x2, ..., xn, are given as a Variable Values Assignment (VVA)
(x1 = b1,x2 = b2,...,xn = bn)
with b1,b2,...,bn ∈ {0,1}. For instance, (x1 = 1, x2 = 1, x3 = 0) would be a valid VVA for n = 3, resulting for the sample function above in the value f(1,1,0) = 1 ∧ (1 ∨ 0) = 1. The corresponding paths are shown bold in the picture.
Your task is to write a program which takes an S-tree and some VVAs and computes f(x1,x2,...,xn) as described above.
Input
The input file contains the description of several S-trees with associated VVAs which you have to process. Each description begins with a line containing a single integer n, 1 ≤ n ≤ 7, the depth of the S-tree. This is followed by a line describing the variable ordering of the S-tree. The format of that line is xi1 xi2 ... xi**n. (There will be exactly n different space-separated strings). So, for n = 3 and the variable ordering x3, x1, x2, this line would look as follows: x3 x1 x2
In the next line the distribution of 0’s and 1’s over the terminal nodes is given. There will be exactly 2n characters (each of which can be ‘0’ or ‘1’), followed by the new-line character. The characters are given in the order in which they appear in the S-tree, the first character corresponds to the leftmost terminal node of the S-tree, the last one to its rightmost terminal node.
The next line contains a single integer m, the number of VVAs, followed by m lines describing them. Each of the m lines contains exactly n characters (each of which can be ‘0’ or ‘1’), followed by a new-line character. Regardless of the variable ordering of the S-tree, the first character always describes the value of x1, the second character describes the value of x2, and so on. So, the line
110
corresponds to the VVA (x1 = 1, x2 = 1, x3 = 0).
The input is terminated by a test case starting with n = 0. This test case should not be processed.
Output
For each S-tree, output the line ‘S-Tree #j:’, where j is the number of the S-tree. Then print a line that contains the value of f(x1,x2,...,xn) for each of the given m VVAs, where f is the function defined by the S-tree.
Output a blank line after each test case.
Sample Input
3
x1 x2 x3
00000111
4
000
010
111
110
3
x3 x1 x2
00010011
4
000
010
111
110
0
Sample Output
S-Tree #1:
0011
S-Tree #2:
0011
HINT
理解这个题意需要知道以下几点:
- 二叉树为满二叉树,编号为k的结点必须有两个孩子,左节点的编号为2k,右节点的编号为2k+1.
- 每一层都对应一个变量,比如第一、二、三层对应变量分别为 x2,x1,x3。
- 二叉树最大右7层,利用暑促足以存储满二叉树。
- 计算VVA时,输入的每一个字符串都是从对应的x1,x2,x3...的顺序展开。即:第一个字符总是描述x1的值,第二个字符描述x2的值,以此类推。因此,第110行对应于VVA(x1= 1,x2= 1,x3= 0)。
- 输出VAA的时候要输出连个回车我,也即是没两个样例有一个空行,包括最后一行。
解决思路:
由于每一等的变量的编号可能发生变化,因此使用输出来存储对应的变量编号,如第一层为x3,则数组x[0]=3。然后根据输入的串一直计算到叶子结点的位置,保存,输出。
Accepted
#include<bits/stdc++.h>
using namespace std;
int main() {
int deep, num,sum,temp,tree=1;
string s,vva,result;
vector<int>x;
while (cin >> deep && deep) {
x.clear();result.clear();temp = 1;
sum = pow(2,deep);
for (int i = 0;i < deep;i++) {
cin >> s;
x.push_back(((int)(s.back() - '0')));
}
cin >> s >> num;
for (int i = 0;i < num;i++) {
cin >> vva;
for (int j=0;j < vva.length();j++) {
if (vva[x[j]-1] == '1')temp = 2 * temp + 1;
else if (vva[x[j]-1] == '0')temp = 2 * temp;
}
result.push_back(s[temp - sum]);temp = 1;
}
cout << "S-Tree #" << tree++ << ':' << endl << result << endl << endl;
}
}
S-Trees UVA - 712的更多相关文章
- UVa 712 S树
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 712 S-Trees
二叉树? 怒水~~ 注意一下查询与x值的对应关系就好~ #include <iostream> #include <cstring> #include <cstdio&g ...
- BFS+数据处理 Under the Trees UVa
题意:将多叉树转化为括号表示法,每个非叶结点的正下方都有一个'|'然后下方是一排'-'和字符,恰好覆盖所有子结点的正上方,单独的一行'#'为数据的结束标志 解题思路:用gets将字符数组输入,本题不用 ...
- UVa 712
这个题根本不用建树,因为是完全二叉树,可以把这个想成二进制.对于根是二进制数的首位,之后依次类推.到最后的叶子节点就是从0到pow(2,n)-1. 关键在于在第一次输入的不是按照x1,x2,x3,x4 ...
- 【紫书】Undraw the Trees UVA - 10562 递归,字符串
题意:给你画了一颗树,你要把它的前序输出. 题解:读进到二维数组.边解析边输出. 坑:少打了个-1. #define _CRT_SECURE_NO_WARNINGS #include<cstri ...
- 看图写树 (Undraw the Trees UVA - 10562)
题目描述: 原题:https://vjudge.net/problem/UVA-10562 题目思路: 递归找结点 //自己的代码测试过了,一直WA,贴上紫书的代码 AC代码 #include< ...
- UVa 712 S-Trees(二进制转换 二叉树叶子)
题意: 给定一颗n层的二叉树的叶子, 然后给定每层走的方向, 0代表左边, 1代表右边, 求到达的是那一个叶子. 每层有一个编号, 然后n层的编号是打乱的, 但是给的顺序是从1到n. 分析: 先用一个 ...
- 【习题 6-2 UVA - 712】S-Trees
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] dfs模拟一下就好. 先预处理一个dfs. 搞出来x叶子节点它的值是什么 [代码] /* 1.Shoud it use long l ...
- UVA - 712 S-Trees(S树)
题意:0往左走,1往右走,已知所有叶子的值,每个查询都是根结点到叶子结点的路径,路径的每一个点分别对应着x1,x2,x3……但是实际上的S树的路径可能并非是x1,x2,x3…… 分析:先存路径变量的顺 ...
随机推荐
- node_puppeteer无界爬虫
环境:node----v14.5.0 vscode----2019 依赖库 (需要自行设置好目录结构,否则会报目录错误) const puppeteer = require("puppete ...
- @RestController和@Controller
1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面 若返回json等内容到页面,则需要加@ResponseBody注解 2 ...
- TERSUS无代码开发(笔记09)-简单实例前端样式设计
前端常用样式设计 =========================================================================================== ...
- 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)
每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...
- django 内置“信号”机制和自定义方法
一.引子 在操作数据的时候,假设我们需要记录一些日志,这个时候,我们需要用什么来显示这个需求呢?装饰器?装饰器只能先实现整体的操作.在django 里面有这么一个东西--信号 下面我们就来了解了解它. ...
- 基于solarflare的openonload技术以TCPDirect方法加速epoll
[前言]基于solarflare的onload模式加速,官方文档给出TCPDirect模式可以实现从300ns到30ns的延迟缩减.我们需要测试在我们的交易模型框架中他的延时,有人给出了tcpdire ...
- ss_port_change - 一键修改ss配置与Centos7的Firewall策略脚本
ss_port_change 修改ss配置与Centos7的Firewall策略脚本 注意是否需要修改config路径与ss服务的名 脚本的敏感字用了*代替 项目地址 Github 脚本 #!/bin ...
- Gym100923H Por Costel and the Match
题目链接:http://codeforces.com/gym/100923/problem/H 分析:并查集,用enemy储存x的敌人,用weight储存权重决定根节点 需用scanf和puts输入输 ...
- three.js cannon.js物理引擎之齿轮动画
郭先生今天继续说一说cannon.js物理引擎,并用之前已经学习过的知识实现一个小动画,知识点包括ConvexPolyhedron多边形.Shape几何体.Body刚体.HingeConstraint ...
- 基于云原生DevOps服务自动化部署前端项目学习总结
本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...