问题描述

假设某机场所有登机口(Gate)呈树形排列(树的度为3),安检处为树的根,如下图所示。图中的分叉结点(编号大于等于100)表示分叉路口,登机口用小于100的编号表示(其一定是一个叶结点)。通过对机场所有出发航班的日志分析,得知每个登机口每天的平均发送旅客流量。作为提升机场服务水平的一个措施,在不改变所有航班相对关系的情况下(即:出发时间不变,原在同一登机口的航班不变),仅改变登机口(例如:将3号登机口改到5号登机口的位置),使得整体旅客到登机口的时间有所减少(即:从安检口到登机口所经过的分叉路口最少)。

编写程序模拟上述登机口的调整,登机口调整规则如下:

  1. 首先按照由大到小的顺序对输入的登机口流量进行排序,流量相同的按照登机口编号由小到大排序;
  2. 从上述登机口树的树根开始,按照从上到下(安检口在最上方)、从左到右的顺序,依次放置上面排序后的登机口。
    例如上图的树中,若只考虑登机口,则从上到下有三层,第一层从左到右的顺序为:5、6、14、13,第二层从左到右的顺序为:7、8、9、10、1、2、18、17、16、15,第三层从左到右的顺序为:11、12、3、4、20、19。若按规则1排序后流量由大至小的前五个登机口为3、12、16、20、15,则将流量最大的3号登机口调整到最上层且最左边的位置(即:5号登机口的位置),12号调整到6号,16号调整到14号,20号调整到13号,15号调整到第二层最左边的位置(即7号登机口的位置)。

输入

  1. 首先输入一个整数表示树结点关系的条目数,接着在下一行开始,按层次从根开始依次输入树结点之间的关系。其中分叉结点编号从数字100开始(树根结点编号为100,其它分叉结点编号没有规律但不会重复),登机口为编号小于100的数字(编号没有规律但不会重复,其一定是一个叶结点)。
  2. 在输入完树结点关系后,接下来输入登机口的流量信息,每个登机口流量信息分占一行,分别包括登机口编号(1~99之间的整数)和流量(大于0的整数),两整数间以一个空格分隔
12
100 101 102 103
103 14 108 13
101 5 104 6
104 7 8 -1
102 105 106 107
106 1 110 2
108 16 15 -1
107 18 111 17
110 3 4 -1
105 9 109 10
111 20 19 -1
109 11 12 -1
17 865
5 668
20 3000
13 1020
11 980
8 2202
15 1897
6 1001
14 922
7 2178
19 2189
1 1267
12 3281
2 980
18 1020
10 980
3 1876
9 1197
16 980
4 576

输出

按照上述调整规则中排序后的顺序(即按旅客流量由大到小,流量相同的按照登机口编号由小到大)依次分行输出每个登机口的调整结果:先输出调整前的登机口编号,再输出要调整到的登机口编号。编号间均以一个空格分隔。

12 5
20 6
8 14
19 13
7 7
15 8
3 9
1 10
9 1
13 2
18 18
6 17
2 16
10 15
11 11
16 12
14 3
17 4
5 20
4 19

问题分析

虽然题面上说是树,但想到有层次关系,很容易就能想到用宽搜bfs

C++

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 1010, M = 110;vector<int> tree[1010];  // 存储分支结点
vector<int> ans;  // 按规则次序存储登机口,左右上下
int n, m;
queue<PII> q; struct Door {int no;  // 编号int man;  // 人流量bool operator<(const Door& W) const {if (man == W.man) return no < W.no;return man > W.man;}
}door[M];int main() {scanf("%d", &n);for (int i = 0; i < n; i++) {int x;scanf("%d", &x);for (int j = 0; j < 3; j++) {int y;scanf("%d", &y);if (y != -1) tree[x].push_back(y);}}q.push({100, 0});while (q.size()) {auto t = q.front();q.pop();int num = t.first, level = t.second;for (auto tmp: tree[num]) {if (tmp >= 100) {q.push({tmp, level+1});} else {ans.push_back(tmp);}}}m = ans.size();for (int i = 0; i < m; i++) {scanf("%d %d", &door[i].no, &door[i].man);}sort(door, door + m);for (int i = 0; i < m; i++) {printf("%d %d\n", door[i].no, ans[i]);}return 0;
}

【buaa机试题】机场登机口调整相关推荐

  1. 【华为机试真题 Python实现】2022年4、5月高频机试题

    文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...

  2. 2023新华为OD机试题 - 特异性双端队列(JavaScript) | 刷完必过

    华为Od必看博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 华为OD机试 全流程解析+经验分享,题型分 ...

  3. 2020年华科计算机考研机试题答案(没弄懂题目的意思)

    2020年华科研究生复试机试题,包含测试数据和题目,里面是文档和要所报文件.供考研学子学习使用.此数据量有点大,涉及到链表,数据转换,和容器.以下代码都是我写的,欢迎交流.原题目和测试文档链接地址是[ ...

  4. 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...

    浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx 第 PAGE 26 页 共 NUMPAGES 36 页 浙江大学远程教育学院机试题 Windows操作题( ...

  5. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  6. 华为校园招聘Java机试题

    又到校园招聘的时候了,前几天听同学说华为校招还要考上机,然后就在网上找往年的机试题,找到之后就开始战斗了..下面的题目都是在网上找的,然后代码是自己一个一个写的... 1.程序实现目标: 输入一个字符 ...

  7. 2014届华为校园招聘机试题

    华为2014校园招聘的机试题目和2013年的完全一样. 一.题目描述(60分): 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的 ...

  8. java的decode_Java decode机试题

    /** * * java编写encode方法和decode方法,机试题 请你用java,c,c++ * 中任何一种语言实现两个函数encode()和decode(),分别实现对字符串的变换和复原. * ...

  9. 2011年华科计算机考研复试机试题真题

    很好的资料哦,更多资料请访问王道论坛:www.cskaoyan.com 2011年华科计算机考研复试机试题真题:

最新文章

  1. 二进制包安装MySQL数据库
  2. C++复习笔记--继承和派生
  3. 4、jeecg 笔记之 自定义显示按钮 (exp 属性)
  4. 请问 CType和DirectCast函数有何区别
  5. Provisioning Services 7.8 入门系列教程之十一 通过版本控制自动更新虚拟磁盘
  6. 地牢房间迷宫走廊生成(二),Python实现洪水法、完美迷宫
  7. 数据结构|-二叉查找树(二叉搜索树)的链式存储结构的实现
  8. mysql二进制文件如何查看_使用mysqlbinlog查看MySQL二进制文件内容
  9. 西门子Smart 200 PLC 封装运动控制向导生成指令(脉冲)
  10. Python三大神器之virtual使用
  11. 浅谈5G和4G有哪些区别?
  12. android代码 qq语音,Android仿QQ语音变声功能实现(二)---移植到android studio 并
  13. 20162327WJH四则运算第二周总结
  14. 什么是深度学习、强化学习
  15. Hyperlynx使用心得
  16. 实战技法 - 短线操盘 (8)
  17. 小米扫地机器人 虚拟墙_扫地机器人虚拟墙是什么东西?
  18. Beta 测试和 Alpha 测试有什么区别?
  19. 人工智障和神经病网络对话--30行python让图灵机器人和茉莉机器人无止尽的瞎扯蛋
  20. java制作二维码笔记

热门文章

  1. 怎么用VLOOKUP来匹配excel表里面的数据
  2. 总结之CSIG-MIIP 2017
  3. 基于cocoCreator版本2.4.5整理一款2D小游戏快速开发的游戏框架
  4. 菜鸟网html dom对象,JavaScript学习指南
  5. 逻辑学和计算机科学,数学、逻辑与计算机科学的关系
  6. 面试系列(十六):58同城 后台开发
  7. 小心你的眼睛—绝妙的视觉错觉图片集锦
  8. 元宇宙四象限是什么?线上应用、线下应用、虚拟世界、镜像世界?
  9. python如何使用多线程_python如何使用多线程
  10. CXM百科 | 知了知了,NPS知多少