CF2216A Course Wishes
题目描述
qwqkawaii 正在登记 $n$ 门课程的选课($n \le 50$)。在选课系统中,他可以为每门课程提交一个志愿等级,表示他对于这门课程的优先级。
课程志愿等级被分为 $k+1$ 个($k \le 20$)级别,其中第 $1$ 级为最高优先级,第 $k+1$ 级为最低优先级。
前 $k$ 个志愿等级都有人数(容量)限制:对于每个 $1 \le i \le k$,第 $i$ 级志愿最多只能有 $a_i$ 门课程。注意,第 $k+1$ 级志愿没有容量限制。
最初,第 $i$ 门课程的志愿等级为 $b_i$,并保证最初的分配满足所有容量限制。现在 qwqkawaii 想把所有课程都调整到志愿等级 $k+1$。为此,他可以使用如下操作,最多 $1000$ 次:
- 选择一门课程 $i$($1 \le i \le n$),然后将 $b_i$ 增加 $1$。
注意:
- 已经处于 $k+1$ 级的课程不能再选择;
- 每进行一次操作后,所有容量限制必须始终满足。
你的任务是构造一个合法的调整序列,使用操作次数不超过 $1000$,或者报告无法完成。
输入格式
每个测试点包含多组测试用例。第一行为测试用例组数 $t$($1 \le t \le 50$)。下面描述每个测试用例。
每个测试用例的第一行为两个整数 $n$ 和 $k$($1 \le n \le 50$,$1 \le k \le 20$)——课程数和(除最低优先级外的)优先级个数。
第二行为 $k$ 个整数 $a_1, a_2, \ldots, a_k$($1 \le a_i \le n$)——前 $k$ 个志愿等级对应的容量限制。
第三行为 $n$ 个整数 $b_1, b_2, \ldots, b_n$($1 \le b_i \le k+1$)——每门课程的初始志愿等级。
保证初始分配满足所有容量限制。
输出格式
对于每个测试用例,如果无法达到目标状态,输出一行数字 $-1$。
否则,首先输出一个整数 $m$($0 \le m \le 1000$),表示操作次数。
接下来输出一行 $m$ 个整数 $u_1, u_2, \ldots, u_m$($1 \le u_i \le n$),表示第 $i$ 次操作选择了编号为 $u_i$ 的课程,将其当前志愿等级 $b_{u_i}$ 增加 $1$。
说明/提示
在第一个样例中,初始志愿等级为 $[1, 2, 2]$。容量限制 $a_1=2$,$a_2=2$。操作如下:
1. 将第 $2$ 门课程提升至 $3$ 级,此时志愿等级为 $[1, 3, 2]$。
2. 将第 $1$ 门课程提升至 $2$ 级,此时志愿等级为 $[2, 3, 2]$。
3. 将第 $3$ 门课程提升至 $3$ 级,此时志愿等级为 $[2, 3, 3]$。
4. 将第 $1$ 门课程提升至 $3$ 级,此时志愿等级为 $[3, 3, 3]$,与目标状态一致。
第二个样例中,初始状态已经符合目标,因此无需操作。
由 ChatGPT 5 翻译