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. 关于fastjson的一个坑:输出json时,bean对象属性首字母默认被小写

    fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴. 主要特点: 快速FAST: 比其它任何基于Java的解析器和生成器更快,包括jackson 强大:支 ...

  2. java基础--配置环境变量的意义

    0.jre和jdk jre(java runtime environment) 运行java程序要用的Java运行环境 jdk:java开发人员要用的java开发环境,包括jre 1.JAVA_HOM ...

  3. JAVA—编码问题

    一.编码.(引用  百度百科) 编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码.用预先规定的方法将文字.数字或其它对象编成数码,或将信息.数据转换成规定的电脉冲信号 ...

  4. java学习笔记—web计算器(36)

    MVC模式 模式主要的任务是帮助开发者解决一类问题. MVC模式主要是用于规划你的网站的开发的一个基本的结构. Servlet记住充当的是控制器层.cn.itcast.controller Java类 ...

  5. java学习笔记—第三方数据库连接池包1(29)

    第一步:导入dbcp包 第二步:通过核心类连接数据 BasicDataSource它是javax.sql.DataSrouce的子类. 一个工具类:BasicDataSourceFactory. 手工 ...

  6. java中数组的插入

    package com.hxzy.demo; import java.util.Arrays;import java.util.Scanner; public class Demo1 { public ...

  7. tomcat 线程模型

    最近看到了内网ATA上的一篇断网故障时Mtop触发tomcat高并发场景下的BUG排查和修复(已被apache采纳),引起了我的好奇,感觉原作者对应底层十分了解,写的很复杂.原来对于tomcat的线程 ...

  8. Metal Programming Guide

    读苹果文档时的笔记,给自己看. primary goal of Metal is to minimize the CPU overhead incurred by executing GPU work ...

  9. iOS学习笔记(3)--初识UINavigationController(无storyboard)

    纯代码创建导航控制器UINavigationController 在Xcode6.1中创建single view application的项目,删除Main.storyboard文件,删除info.p ...

  10. mysql5.7.20多实例编译安装

    好记性不如烂笔头! MySQL多实例 实际上就是在同一台服务器上运行多个mysql服务进程. 相同点:公用同一套MySQL安装程序. 不同点:使用不同的配置文件(也可以相同).启动程序(也可以相同). ...