#P16851. [GKS 2021 #D] Final Exam

[GKS 2021 #D] Final Exam

题目描述

又到了算法与数据结构的期末考试时间!

Edsger 准备了 NN 套题目。每套题目包含难度递增的题目序列;第 ii 套可以用两个整数 AiA_iBiB_iAiBiA_i \le B_i)描述,表示该套包含难度为 Ai,Ai+1,,BiA_i, A_i+1, \dots, B_i 的题目。在所有题目的所有题目中,保证没有两道题目的难度相同。

本学期 Edsger 要测试 MM 名学生。他想给每个学生恰好出一道题,题目来自他准备的某套题目中。不能有两名学生做完全相同的题目,因此当 Edsger 用某道题测试一名学生后,这道题就不能再用了。通过无数次讲课、练习和项目,Edsger 估算了第 jj 名学生的能力水平为 SjS_j,并希望给该学生出一道难度为 SjS_j 的题目。不幸的是,这并不总是可行,因为 Edsger 可能没有准备该难度的题目,或者该题目之前已经被其他学生用过了。因此,Edsger 会为第 jj 名学生选择一道难度为 PjP_j 的题目,使得 PjSj|P_j - S_j| 最小,并且该难度 PjP_j 的题目在第 jj 名学生之前尚未被任何学生使用过。当存在多个最小差值时,Edsger 总是选择难度较小的题目。注意,为第 jj 名学生选择的题目可能会影响之后所有学生的选择,因此你必须按照输入中出现的顺序处理学生。

由于跟踪所有题目可能相当复杂,你能帮助 Edsger 确定他应该给所有学生哪些题目吗?

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。

每个测试用例的第一行包含两个整数 NNMM:分别是题目的套数和学生的数量。接下来 NN 行描述每套题目。

这些行中的每一行包含两个整数 AiA_iBiB_i,表示第 ii 套题目中最容易和最难的题目难度。最后,测试用例以一行结束,该行包含 MM 个整数 S1,S2,,SMS_1, S_2, \dots, S_M,表示学生按测试顺序的能力水平。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: P1 P2 ... PM,其中 xx 是测试用例编号(从 11 开始),PjP_j 是给第 jj 名学生的题目难度。

2
5 4
1 2
6 7
9 12
24 24
41 50
14 24 24 4
1 1
42 42
24
Case #1: 12 24 11 2
Case #2: 42

提示

在样例 #1 中,有 N=5N = 5 套题目和 M=4M = 4 名学生。

  • 对于第一名学生,我们寻找难度最接近其能力水平 S1=14S_1 = 14 的题目。最小差值的题目是难度 1212,可以在第三套题目中找到,因此 P1=12P_1 = 12
  • 对于第二名学生,我们寻找难度最接近其能力水平 S2=24S_2 = 24 的题目。幸运的是,我们可以在第四套题目中找到恰好为 2424 的题目,因此 P2=24P_2 = 24
  • 对于第三名学生,我们再次寻找难度最接近其能力水平 S3=24S_3 = 24 的题目。由于难度 2424 已经被使用,不能再用。最接近的题目难度是 1111,因为 1212 也被用过了。因此 P3=11P_3 = 11
  • 最后,对于第四名学生,我们寻找难度最接近其能力水平 S4=4S_4 = 4 的题目。有两个题目的差值相同:2266。我们选择难度较小的题目,所以 P4=2P_4 = 2

在样例 #2 中,有 N=1N = 1 套题目和 M=1M = 1 名学生。唯一的一套题目中只有一道题,因此我们只能用这道题来测试这唯一的学生,所以 P1=42P_1 = 42

限制条件

1T1001 \le T \le 100

在所有题目中,没有两道题目的难度相同。

题目总数大于等于学生人数。

测试集 1

1N10001 \le N \le 1000

1M10001 \le M \le 1000

对于所有 ii1AiBi10001 \le A_i \le B_i \le 1000

对于所有 jj1Sj10001 \le S_j \le 1000

测试集 2

1N1051 \le N \le 10^5

1M1051 \le M \le 10^5

对于所有 ii1AiBi10181 \le A_i \le B_i \le 10^{18}

对于所有 jj1Sj10181 \le S_j \le 10^{18}

翻译由 DeepSeek V4 Pro 完成