Elven Postman

  Elves are very peculiar creatures. As we all know, they can live for a very long time and their magical prowess are not something to be taken lightly. Also, they live on trees. However, there is something about them you may not know. Although delivering stuffs through magical teleportation is extremely convenient (much like emails). They still sometimes prefer other more “traditional” methods.

  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)的更多相关文章

  1. (二叉树)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)  ...

  2. (并查集)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 ...

  3. (线段树 区间查询)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/ ...

  4. 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 ...

  5. (字符串处理)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)  ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. 从极速飞艇源码 VantComponent 谈 小程序维护

    在开发极速飞艇源码详情咨询Q166848365小程序的时候,我们总是期望用以往的技术规范和语法特点来书写当前的小程序,所以才会有各色的小程序框架,例如 mpvue.taro 等这些编译型框架.当然这些 ...

  2. 命令式语言和声明式语言对比——JavaScript实现快速排序为例

    什么是命令式编程 (Imperative Programming)? 命令机器如何做事情,强调细节实现 java.c.c++等都属此类. “这些语言的特征在于,写出的代码除了表现出“什么(What)” ...

  3. 三部曲搭建本地nuget服务器(图文版)

    下载Demo: 1.新建web的空项目 2.引入nuget包 3.修改配置文件config(可以默认) 运行效果:

  4. 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用

    解决方法是分两次查询. 报错的原因是在涉及到内存中的对象与EF里的对象混合查询时,内存中的对象要是基元类型. 第一次查询实际上会因为EF的延时加载,不会立即将数据查询到内存中. 解决方法是对第一次查询 ...

  5. C#文字转换语音朗读或保存MP3、WAV等格式

    最近遇到一个需求,需要把文字转换语音,参考很多大佬写的方法,最后经过自己改造实现文字在线朗读.保存MP3.WAV等格式. //需要引用System.Speech程序集 //引用using System ...

  6. UWP开发入门(二)——RelativePanel

    RelativePanel也是Win10 UWP新增的控件,和上篇提到的SplitView一样在UWP的UI布局起到非常重要的作用.说句实在话,这货其实就是为了UWP的Adaptive UI而特意增加 ...

  7. WPF Adorner 在TabControl切换TabItem时消失

    错误的截图: 一开始以为是MVVM绑定的代码中出现了问题,但是通过断点追踪并没有发现问题. 通过通过VS的实时可视化树发现问题:切换Item时Adorner会在AdornerLayer直接消失.届时怀 ...

  8. CF553C Love Triangles

    题目链接 题意:给定n个点,给出一些边权为0/1的边,构造完全图,满足对于任何一个三元环,三条边权和为奇.求符合条件的完全图数量,对\(1e9+7\)取模. 分析:其实原题给定的边权是love/hat ...

  9. BEAUTIFUL

    DESCRIPTION:一个长度为n 的序列,对于每个位置i 的数ai 都有一个优美值,其定义是:找到序列中最长的一段[l, r],满足l<i<r,且[l, r] 中位数为ai(我们比较序 ...

  10. numpy 常用方法2

    Python之Numpy基础   一个栗子 >>> import numpy as np >>> a = np.arange(15).reshape(3, 5) & ...