题号:NC204324
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
抗疫期间,医院组织了一场技能大赛,以提升医生们的作战能力。
各路医生纷纷参与,积极参加到抗疫技能大赛里来,每一名医生都有一个独特的在
至
间的编号。比赛共分为两轮,有的医生因为救治病人繁忙,只能参加一轮。每一轮每个人都有一个排名。我们认为第
名的医生前有
名医生超过他。
下面就是一个比赛结果的例子:
第1场比赛 | 第1场比赛 | 第2场比赛 | 第2场比赛 |
排名 | 医生编号 | 排名 | 医生编号 |
1 | 9 | 1 | 3 |
2 | 7 1 4 | 2 | 5 |
5 | 5 | 3 | 1 10 |
6 | 15 8 | 5 | 6 |
8 | 31 18 | 6 | 9 |
10 | 17 | 7 | 19 |
| | 8 | 4 20 |
| | 10 | 21 |
现在,我们要根据两轮比赛结果,对各位医生的水平进行一个总体的排名,排名规则如下:
-
对于参加两场比赛的医生
- 如果有两名医生都参加了两场比赛,并且其中一名医生在两场比赛中表现的都比另一名医生好(或在一场比赛中好,而在另一场比赛中的成绩并列),那么这名医生总排名比另一名医生高。
- 如果有两名医生都参加了两场比赛,其中一名医生在一场比赛中表现较好,而另一名医生在另一场比赛中表现较好,那么他们的总排名取决于他们在两场比赛中名次的差值。
例如,在上述例子里,1号医生在第一场比赛比5号医生高
名,而5号医生在第二场比赛比1号医生高
名,那么1号医生的总排名比5号医生的排名高。
如果两场比赛中名次差值相同,则他们总排名相同。如9号医生和5号医生,他们两场比赛的名次差值都是4名,因此他们总排名相同。
-
对于只参加一场比赛的医生
对于那些事务繁忙只能参加一场比赛的医生,我们也要尽可能的将其计入总排名里。记录规则如下:
- 如果有一名医生参加了两项比赛,并与这名只参加了一场比赛的医生在这场比赛中排名并列,那么他们两名医生的总排名相同(如果有多于一名这样参加两场比赛的医生,则他们的总排名应相同,否则无法确定这名医生的总排名)。
- 如果在总排名表里能找到一个位置,使得在此名次之前只有和这名只参加一场比赛的医生在同一比赛中表现较好的医生,而在此名次之后只有和这名只参加一场比赛的医生在同一比赛中表现较差的医生,则该医生的名次就是此位置。如果不止一名医生在总排名中要争夺相同位置,那么他们的相互顺序由他们在比赛中的名次来决定。
对于上述例子里的比赛结果,给出的总排名如下:
参加了2场比赛的医生 | 只参加1场比赛的医生 |
| 3 |
1 | 10 |
9 5 | |
| 19 |
4 | 20 |
| 15 8 |
| 31 18 |
| 17 21 |
说明如下:
- 对于1、4、5、9号医生的相对排名,根据参加两场比赛的医生的排名规则决定。
- 根据2-1的规则,10号医生应该和1号医生并列,20号医生和4号医生并列。但7号医生的排名无法确定(因为1号医生和4号医生排名不同)。
- 根据2-2的规则,3号医生应该排在总排名第一名,因为他在第二场比赛中比1、4、5、9号都要好。
- 根据2-2的规则,6号医生的排名无法确定。
- 根据2-2的规则,19号医生应该排在9号、5号与4号之间,因为在第二场比赛中,1、5、9号表现都比19号好,但4号的表现比19号差。
- 根据2-2的规则,8、15、17、18、21、31号医生排名垫底,但是8、15号排名靠前(在第一场比赛中都获得第6名),18、31号排名居中(在第一场比赛中都获得第8名),17、21号排名垫底(在两场比赛中分别获得第10名)。
请你写一个程序,根据两场比赛的结果,按照上述规则给出最终排名表。
输入描述:
输入数据包括两场比赛的信息,比赛之间用一个空行隔开。对于每场比赛,第一行输入一个整数
,表示当场比赛排行榜的行数。
接下来
行,每行包括一些以空格隔开的整数,表示医生的编号。在同一行的医生都有着并列的名次。
输出描述:
输出按照排行规则输出总排行。每行输出一些以空格隔开的整数,表示医生的编号。在同一行的医生都有着并列的名次。对于在总排行上并列的医生,你可以以任意顺序输出他们。对于无法确定排名的医生,请不要输出他们。注意行末不要有多余的空格!
示例1
输入
复制
6
9
7 1 4
5
15 8
31 18
17
8
3
5
1 10
6
9
19
4 20
21
输出
复制
3
1 10
5 9
19
4 20
15 8
31 18
17 21