HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)
Elven Postman
So, as a elven postman, it is crucial to understand how to deliver the mail to the correct room of the tree. The elven tree always branches into no more than two paths upon intersection, either in the east direction or the west. It coincidentally looks awfully like a binary tree we human computer scientist know. Not only that, when numbering the rooms, they always number the room number from the east-most position to the west. For rooms in the east are usually more preferable and more expensive due to they having the privilege to see the sunrise, which matters a lot in elven culture.
Anyways, the elves usually wrote down all the rooms in a sequence at the root of the tree so that the postman may know how to deliver the mail. The sequence is written as follows, it will go straight to visit the east-most room and write down every room it encountered along the way. After the first room is reached, it will then go to the next unvisited east-most room, writing down every unvisited room on the way as well until all rooms are visited.
Your task is to determine how to reach a certain room given the sequence written on the root.
For instance, the sequence 2, 1, 4, 3 would be written on the root of the following tree.
Input
First you are given an integer T(T≤10)T(T≤10)indicating the number of test cases.
For each test case, there is a number n(n≤1000)n(n≤1000)on a line representing the number of rooms in this tree. nn integers representing the sequence written at the root follow, respectively a1,...,ana1,...,an where a1,...,an∈{1,...,n}a1,...,an∈{1,...,n}.
On the next line, there is a number qqrepresenting the number of mails to be sent. After that, there will be qq integers x1,...,xqx1,...,xqindicating the destination room number of each mail.OutputFor each query, output a sequence of move (EE or WW) the postman needs to make to deliver the mail. For that EE means that the postman should move up the eastern branch and WW the western one. If the destination is on the root, just output a blank line would suffice.
Note that for simplicity, we assume the postman always starts from the root regardless of the room he had just visited.Sample
Input
2
4
2 1 4 3
3
1 2 3
6
6 5 4 3 2 1
1
1
Sample Output
E WE
EEEEE
解题思路:
本题有多组数据,每组数据包含第一行结点数量,第二行结点权值,第三行目标点数量,第行目标点权值要求建立二叉搜索树后,在树中查找目标点输出查找路径,查找左子树输出E,查找右子树输出W,若目标点为根结点输出一个空行。
样例解析:
2 //测试组数
4 //二叉搜索树结点数量(第一组)
2 1 4 3 //二叉搜索树结点权值(第一组) //所建树前序遍历2 1 4 3
3 //目标点数量(第一组)
1 2 3 //目标点权值(第一组) //输出1:E 2:空行 3:WE
6 //二叉搜索树结点数量(第二组)
6 5 4 3 2 1 //二叉搜索树结点权值(第二组) //所建树前序遍历6 5 4 3 2 1
1 //目标点数量(第二组)
1 //目标点权值(第二组) //输出1:EEEEE
#include <bits/stdc++.h>
using namespace std;
typedef int dataType;
vector<int> arrayn;
vector<int> pattern;
struct node{
dataType data;
node *leftChild;
node *rightChild;
node(){
data = ;
leftChild = NULL;
rightChild = NULL;
}
};
void searchBST(node *root, dataType x){ //查找
if(root == NULL){ //找到空位置查找失败返回
return;
}
if(root->data == x){ //找到目标点换行
printf("\n");
}else if(root->data > x){ //x比根结点数据域小 查找左子树输出E
printf("E");
searchBST(root->leftChild, x); //x比根结点数据域大 查找右子树输出W
}else if(root->data < x){
printf("W");
searchBST(root->rightChild, x);
}
}
void insertBST(node *&root, dataType x){ //插入
if(root == NULL){ //找到空位置即使插入位置
root = new node(); //新建结点权值为x
root->data = x;
return;
}
if(x == root->data){ //要插入结点已存在直接返回
return;
}
else if(root->data > x){ //x比根结点数据域小 需要插在左子树
insertBST(root->leftChild, x);
}
else if(root->data < x){ //x比根结点数据域大 需要插在右子树
insertBST(root->rightChild, x);
}
}
node *createBST(){ //以arrayn中记录的结点建树
node *root = NULL;
for(vector<int>::iterator it = arrayn.begin(); it != arrayn.end(); it++){
insertBST(root, *it);
}
return root;
}
/*void preorder(node *root){
if(root == NULL)
return;
printf("%d", root->data);
preorder(root->leftChild);
preorder(root->rightChild);
}*/
int main()
{
int t; //测试组数
while(scanf("%d", &t) != EOF){
int n; //二叉搜索树结点数量和目标点数量
while(t--){
arrayn.clear(); //清空储存结点权值的容器
scanf("%d", &n); //输入结点数
int temp;
for(int i = ; i < n; i++){
scanf("%d", &temp); //输入权值
arrayn.push_back(temp); //将权值储存在arrayn中
}
node *root = NULL;
root = createBST(); //建树
//preorder(rood);
scanf("%d", &n); //输入目标点数量
for(int i = ; i < n; i++){
scanf("%d", &temp); //输入目标点权值
searchBST(root, temp); //查找并输出路径
}
}
}
return ;
}
HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)的更多相关文章
- (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)
http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others) ...
- (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )
http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others) Memo ...
- (线段树 区间查询)The Water Problem -- hdu -- 5443 (2015 ACM/ICPC Asia Regional Changchun Online)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 The Water Problem Time Limit: 1500/1000 MS (Java/ ...
- HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...
- (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5455 Fang Fang Time Limit: 1500/1000 MS (Java/Others) ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...
- 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2015 ACM/ICPC Asia Regional Changchun Online Pro 1008 Elven Postman (BIT,dfs)
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
随机推荐
- 解决json结合struts2时,Class org.apache.struts2.json.JSONWriter can not access a member of * 的问题
在使用json的时候,产生的一个错误,查了一下资料,原来是struts2和json一起使用的时候,才产生的问题,虽然不影响程序的运行,但是总是会有一些异常的日志产生,并且,这个也会增加程序的负担. 原 ...
- Replication--备份初始化需要还原备份么?
测试场景:发布服务器:SQLVM6\SQL2订阅服务器:SQLVM5\SQL2分发服务器:SQLVM3\SQL2发布数据库:RepDB2订阅数据库:RepDB2发布:RepDB2_TB1 测试步骤:1 ...
- solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...
- Rx.net 例子——(1)基础
1.订阅序列 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- 使用RazorGenerator和预编译MVC引擎将Razor视图编译成DLL
Web开发中常常会有跨页面.跨站点.跨项目组的复用模块(界面),最常见的就是如下方所示的Web页面上用于显示登录或用户名的头部模块, 使用ASP.NET MVC开发中,常见的做法是写成部分视图,本文的 ...
- https经过ngxin在web服务器收到http请求
一. 问题描述: nginx代理nexus的时候页面不全,部分https地址自动转成http了,使用方案四解决的 浏览器输入https://www.mysite.com,后台通过request.get ...
- CTF 介绍及杂项
CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架16(窗体基类场景2)
如果没有特别需求,和场景1一样只变更表名,主键字段,检测字段等名称,不需要写其它代码了. * 清单列表+单笔编辑/保存,适用于大多数基础资料管理以及简单的单据资料录入(当然,排版是要改一改的): * ...
- jvm学习笔记(一)
一.java的运行原理 开发人员编写java代码(.java文件) 编译器将.java文件编译成字节码文件(.class文件) 字节码被装入内存,当字节码被装入内存之后,它就会被解释器解释执行或是被即 ...
- 3. STL编程三
1. 算法容器的使用: #include <iostream> #include <functional> #include <vector> #include & ...