CF377B Preparing for the Contest

题目描述

世界上最大规模的编程竞赛即将举行,但测试系统中仍存在 $m$ 个漏洞。竞赛的主办方是一所著名大学,无奈之下只能吸引大学生们来修复这些漏洞。该大学拥有 $n$ 名能够胜任此项工作的学生。学生们意识到自己是组织者唯一的希望,因此他们不愿意无偿工作:第 $i$ 个学生希望能在他的课程中获得 $c_i$ 个“及格”作为报酬(与工作量无关)。 漏洞和学生一样各不相同:每个漏洞具有复杂度 $a_j$,而每个学生都有自己的能力水平 $b_i$。第 $i$ 个学生只有当他的能力水平不低于漏洞 $j$ 的复杂度,即 $b_i \geq a_j$ 时,才能修复该漏洞,且在一天内完成。否则该漏洞需要由其他学生来修复。当然,没有任何一个学生能够在一天内修复多个漏洞。所有漏洞彼此独立,因此可以按任意顺序修复,不同的学生也可以同时工作。 大学希望尽快修复所有漏洞,但给予学生的及格数总和不得超过 $s$。请你确定应当选择哪些学生,并给出工作安排方案,明确每个漏洞应由哪位学生修复。

输入格式

第一行包含三个以空格分隔的整数:$n$、$m$、$s$($1 \leq n, m \leq 10^{5}$,$0 \leq s \leq 10^{9}$)——学生人数、漏洞数量以及大学最多可以给予学生的及格数总和。 第二行包含 $m$ 个空格分隔的整数 $a_1, a_2, \ldots, a_m$($1 \leq a_j \leq 10^{9}$),表示每个漏洞的复杂度。 第三行包含 $n$ 个空格分隔的整数 $b_1, b_2, \ldots, b_n$($1 \leq b_i \leq 10^{9}$),表示每个学生的能力水平。 第四行包含 $n$ 个空格分隔的整数 $c_1, c_2, \ldots, c_n$($0 \leq c_i \leq 10^{9}$),表示每个学生期望获得的及格数量。

输出格式

如果大学无法修复所有漏洞,输出一行 “NO”。 否则,第一行输出 “YES”;下一行输出 $m$ 个空格分隔的整数:第 $i$ 个数字表示修复第 $i$ 个漏洞的学生编号(按输入顺序)。所有漏洞应当在尽可能少的天数内修复(即最小化所用天数),且及格数总和不得超过 $s$。如果最优方案不唯一,可以输出任意一种。

说明/提示

以第一个样例为例: 第三位学生(能力为 3)必须修复第 2 和第 4 个漏洞(复杂度分别为 3 和 2),第二位学生(能力为 1)必须修复第 1 和第 3 个漏洞(复杂度均为 1)。每位学生修复一个漏洞需 1 天,因此所有漏洞可在 2 天内完成(学生可以并行工作)。 第二位学生希望获得 3 个及格,第三位学生希望获得 6 个及格。由于大学最多可给出 9 个及格,因此这一方案是可行的。 由 ChatGPT 5 翻译