UVA-712-满二叉树
一个策略树(S-tree)是一组变量Xn={x1,x2...xn}的表现形式,
它代表一个布尔函数f:{0,1}n->{0,1},策略树每条路径从根结点开始由n+1个结点组成,
策略树的每一个结点都有一个深度,
结点的深度等于当前结点到根结点之间的结点总和(根节点的深度等于0),
结点深度小于n的结点叫做非终止结点,所有的非终止结点都有俩个孩子,左孩子和右孩子,
每个非终止结点被xi标志(xi来自Xn集合),
所有深度一样的非终止结点被一样的xi标志,
所有深度不一样的非终止结点被不一样的xi标志,所以根结点由独特的xi1变量标志,
独特的xi2变量标志深度等于1的结点,一直下去.xi1,xi2....xin叫做变量顺序,
请注意,变量顺序和分布在终止结点上的0和1有效的描述了一颗策略树.
在先前的说明中,每一颗策略树代表了一个布尔函数f,如果你有一颗策略树和变量x1....xn的值,你可以非常简单的算出f(x1....xn)的结果
计算方法如下
从根结点开始,重复使用一下方法:如果结点标记为xi,这个变量的值是0还是1决定你是往左孩子走还是右孩子走,
一旦你到达一个终止结点,当前的函数值就等于当前的终止结点的值
在图片里,俩个策略树代表相同的布尔函数f(x1,x2,x3)=x1^(x2vx3),正如我们展示的那样,左边的变量顺序是x1,x2,x3,右边的是x3,x1,x2
变量x1.....xn的值,如下声明变量的值(VVA)
(x1=b1,x2=b2.......xn=bn)
b1,b2....属于{0,1},我们如下给变量赋值
(x1=1,x2=1,x3=0)是一个合法的VVA,此时n=3,这样将产生同样的函数f(1,1,0)=1^(1 v 0),在图中用粗黑线描出,注意,0往左走,1往右走
你的任务是写一个程序,拿到一颗策略树和VVA,计算f(x1,x2.....xn)
输入
输入文件的组成描述了几组策略树和相关联的VVA,每一个描述第一行由一个单独的int值n组成,1<=n<=7,代表当前策略树的深度,
随下来的行描述策略树的变量顺序,格式:xi1.....xin(由空格隔开的不同的明确的n),
所以,假如n=3,变量顺序x3,x1,x2,这行就像下面那样
x3 x1 x2
下一行由0和1组成代表终止结点,明确的2^n个字符(每一个要么是0要么是1),最左边是最左结点,最右是最右结点(注意,策略树是满二叉树,第n层有2^n个结点)
下一行由一个单独的int类型m组成,代表VVA的数量,在随下来的m行描述它们,每一行包含n个(0或1)字符,
不管策略树的变量顺序,第一个字符总是描述x1,第二个字符描述x2,所以如下面的行
110
组成VVA(x1=1,x2=1,x3=0)
输入结束标志n=0
输出
对每一个策略树,输出一行"S-Tree #j:",j是策略树的序号,然后输出一行,对给定的m个VVA,输出f(x1....xn)的值
AC:0ms
#include <iostream>
#include<stdio.h>
#include<math.h>
using namespace std; int main()
{ int n;
int T = 1;
while (cin >> n)
{
if(n == 0)
return 0;
cout << "S-Tree #" << T << ":" << endl;
T++;
//叶子结点个数2^n
//前面几层总和是2^n-1
//
int num = pow(2, n);
int preNum = num - 1;
char* a = new char[num];
//叶子结点实际位置tIndex-preNum
string str;
getline(cin, str);
getline(cin, str);
for(int i = 0; i < num; i++)
{
cin >> a[i];
}
int m;
cin >> m;
for(int i = 0; i < m; i++)
{
char c;
int index = 0;
for(int j = 0; j < n; j++)
{
cin >> c;
if(c == '0')
{
index = 2 * index + 1;
}
else
{
index = 2 * index + 2;
}
}
cout << a[index - preNum];
}
cout << endl;
cout << endl;
}
return 0;
}
UVA-712-满二叉树的更多相关文章
- UVA 712-S-Trees(满二叉树的简单查询)
题意:给一棵满二叉树,叶子节点赋予权值,0或者1,对于每个查询输出叶子节点的权值,每个查询0代表往左走,1代表往右走,这题坑的地方是层的访问顺序,如第二组测试,由上到下依次是x3,x1,x2,假如给一 ...
- UVa 712 S树
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- [Swift]LeetCode894. 所有可能的满二叉树 | All Possible Full Binary Trees
A full binary tree is a binary tree where each node has exactly 0 or 2 children. Return a list of al ...
- 【C++】满二叉树问题
/* 给出一棵满二叉树的先序遍历,有两种节点:字母节点(A-Z,无重复)和空节点(#).要求这个树的中序遍历.输出中序遍历时不需要输出#. 满二叉树的层数n满足1<=n<=5. Sampl ...
- python实现满二叉树递归循环
一.二叉树介绍点这片文章 二叉树及题目介绍 例题: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下, 小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑.现在 ...
- PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6806292.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 树&二叉树&&满二叉树&&完全二叉树&&完满二叉树
目录 树 二叉树 完美二叉树(又名满二叉树)(Perfect Binary Tree) 完全二叉树(Complete Binary Tree) 完满二叉树(Full Binary Tree) 树 名称 ...
- UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...
- 【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...
- [LeetCode] 894. All Possible Full Binary Trees 所有可能的满二叉树
A full binary tree is a binary tree where each node has exactly 0 or 2 children. Return a list of al ...
随机推荐
- HDU 1176:免费馅饼(DP,自认为很详细的解释)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 3068 最长回文 manacher 算法,基本上是O(n)复杂度
下面有别人的比较详细的解题报告: http://wenku.baidu.com/view/3031d2d3360cba1aa811da42.html 下面贴我的代码,注释在代码中: #include ...
- 磁盘 -> 硬盘 -> c盘 && 内存
磁盘是计算机的外部存储器,分为两类,一类是硬盘,一类是软盘. (附:计算机的存储器有两类,一类是内部存储器(内存条是用半导体材料做成的),断电不会保存当前工作:一类是外部存储器,断了电也能可以保存.) ...
- JNI学习笔记_Java调用C —— Android中使用的方法
一.笔记 1.JNI(Java Native Interface),就是如何使用java去访问C/C++编写的那些库.若想深入了解JNI可以看官方文档jni.pdf.优秀博文:Android JNI知 ...
- stenciljs 学习四 组件装饰器
stenciljs 可以方便的构建交互式组件 支持以下装饰器 component prop watch state method element component 说明 component 包含ta ...
- mysql四种修改密码的方式
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...
- Word中回车和网页换行替换
回车^p 换行^l 用编辑中的查找替换即可 查找^l,替换为^p (一)有建议说按Delete键一个一个将其删除,这是麻烦的,其实可用WORD的查找替换工具一次性替换成回车符.查找--点特殊字符--手 ...
- bzoj 4772 显而易见的数论——拆分数(五边形数定理)+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4772 题解:https://blog.csdn.net/Dream_Lolita/artic ...
- Spring MVC 3.0 深入及对注解的详细讲解[转载]
http://blog.csdn.net/jzhf2012/article/details/8463783 核心原理 1. 用户发送请求给服务器.url:user.do 2. ...
- Python 中的变量
Python采用基于值得内存管理模式,赋值语句的执行过程是:首先把等号右侧标识的表达式计算出来,然后在内存中找一个位置把值存放进去,最后创建变量并指向这个内存地址.Python中的变量并不直接存储值, ...