P12566 [UOI 2023] An Array and Several More Arrays

题目描述

有 $k$ 个整数数组 $a_1, a_2, \ldots, a_k$,其中第 $i$ 个数组包含 $l_i$ 个元素。设 $n = l_1 + l_2 + \ldots + l_k$。 你需要找到 $k$ 个整数 $d_1, d_2, \ldots, d_k$,使得所有 $(a_{i,j} + d_i)$ 两两不同且满足 $1 \leq a_{i,j} + d_i \leq n$。

输入格式

第一行包含两个整数 $n$ 和 $k$($1 \le n \le 10^4$,$1 \le k \le 5$)——分别表示所有数组的元素总数和数组的数量。 接下来的 $k$ 行描述这些数组。第 $i$ 行包含一个整数 $l_i$($1 \le l_i \le n$)和 $l_i$ 个整数 $a_{i,1}, a_{i,2}, \ldots, a_{i,l_i}$($1 \le a_{i,j} \le n$)——分别表示第 $i$ 个数组的长度和元素。 保证 $n = l_1 + l_2 + \ldots + l_k$。

输出格式

如果不存在满足条件的 $d$,输出一行 ``No``。 否则,第一行输出 ``Yes``。 第二行输出 $k$ 个整数 $d_1, d_2, \ldots, d_k$——这些值需要加到对应数组的元素上,以形成 $1$ 到 $n$ 之间的 $n$ 个不同的整数。 如果有多个正确答案,输出任意一个即可。

说明/提示

在第一个样例中,$d = [0,0,0,0,0]$ 满足条件,因为加上对应值后,数组变为 $[1]$、$[2]$、$[3]$、$[4]$、$[5]$。 在第二个样例中,$d = [1,-5,1,1]$ 满足条件,因为加上对应值后,数组变为 $[3,4]$、$[1]$、$[5]$、$[2,6]$。 在第三个样例中,$d = [0,1]$ 满足条件,因为加上对应值后,数组变为 $[1,4,5,6]$ 和 $[2,3,7]$。 ### 评分标准 - ($8$ 分):$k=1$; - ($9$ 分):对于 $1 \le i \le k$ 且 $1 \le j < l_i$,满足 $a_{i,j}+1=a_{i,j+1}$; - ($15$ 分):$k \le 2$; - ($21$ 分):$k \le 3$; - ($10$ 分):对于 $1 \le i \le k$ 且 $1 \le j < l_i$,满足 $a_{i,j}+2=a_{i,j+1}$; - ($10$ 分):对于 $1 \le i \le k$,满足 $(\max_{j \in [1;l_i]} a_{i,j}) - (\min_{j \in [1;l_i]} a_{i,j})=(n-k)$; - ($10$ 分):$n \le 30$; - ($17$ 分):无额外限制。 翻译由 DeepSeek V3 完成