#119. 排队(lineup)
排队(lineup)
【问题描述】
在很多场合,我们都需要排队,比如超市付款,医院看病,就餐等等。“尊老爱幼”是中华名族的传统美德,所以在排队的过程中,遇到老人、幼儿我们应该主动让他们排在前面。请按以下 4 条规则编写一个排队的程序。
(1)老人(年龄 ≥ 60 岁)和幼儿(年龄 ≤ 6 岁)比其他人(6 岁 < 年龄 < 60 岁)优先排在队伍的前面,且所有幼儿排在所有老人的前面。
(2)老人按年龄从大到小的顺序排队,年龄大的优先,年龄相同时,先到的人排在前面。
(3)幼儿按年龄从小到大的顺序排队,年龄小的优先,年龄相同时,先到的人排在前面。
(4)其他人只按到达的先后顺序排队。
【输入数据】输入文件 lineup.in:输入从文件中读取,输入共 n+1 行。
第 1 行一个整数 n,表示排队的总人数。 第 2 行到第 n+1 行,按照到达的先后顺序给出了每个人的基本信息。每行两个整数,第一个整数表示这个人的编号(编号保证不会重复,但不保证连续),第二个整数表示这个人的年龄。
【输出数据】输出文件 lineup.out:结果输出到文件中,输出共 n 行。
每行一个人的编号,表示从前往后的排队结果。
【输入样例】
8
1 14
3 6
4 5
5 62
11 48
17 25
21 60
13 62
【输出样例】
4
3
5
13
21
1
11
17
【样例解释】
共有 8 个人参加排队。编号为 3 和 4 的两个人为幼儿,年龄分别为 6 岁和 5 岁。编号为 5 、21 和 13 的三个人为老人,年龄分别为 62 岁、60 岁和 62 岁。根据排队规则,老人和幼儿排在其他人的前面,而幼儿又排在老人的前面,所以先排编号 3 和 4 的幼儿。幼儿按年龄从小到大的顺序排队,所以第一个人是 4 号,然后是 3 号。接下来排老人,老人年龄大的先排,所以先排 5 号和 13 号,但 5 号比 13 号先到,所以先排 5 号,然后 13 号,接下来 21 号。剩下的人不论年龄大小,全部按到达的顺序排队,依次为 1 号、11 号和 17 号。
【数据范围约定】
40%的测试点输入数据保证 1≤n≤99,且每个人的年龄都不相同。
60%的测试点输入数据保证 1≤n≤1000。
100%的测试点输入数据保证 1≤n≤30000, 1≤人的编号≤32000,2≤人的年龄≤100。