CF1381C Mastermind
题目描述
在 Mastermind 游戏中,有两名玩家——Alice 和 Bob。Alice 拥有一个秘密代码,Bob 试图猜出这个代码。这里,代码被定义为一个长度为 $n$ 的颜色序列。整个颜色集合中恰好有 $n+1$ 种颜色,编号从 $1$ 到 $n+1$。
当 Bob 猜测一个代码时,Alice 会告诉他两个整数 $x$ 和 $y$,用来表示这个猜测的好坏。
第一个整数 $x$ 表示 Bob 的猜测中有多少个位置的颜色与 Alice 的代码完全一致。第二个整数 $y$ 表示两个代码作为多重集合的交集大小。也就是说,如果 Bob 改变他猜测中颜色的顺序,$y$ 就是他最多能猜对的颜色数量。
例如,假设 $n=5$,Alice 的代码为 $[3,1,6,1,2]$,Bob 的猜测为 $[3,1,1,2,5]$。在第 $1$ 和第 $2$ 个位置颜色相同,其余位置不同,所以 $x=2$。这两个代码作为多重集合有 $1,1,2,3$ 这四个颜色是相同的,所以 $y=4$。
 实线表示同一位置颜色匹配。虚线表示不同位置但颜色匹配。$x$ 是实线的数量,$y$ 是所有连线的总数。现在给定 Bob 的猜测和 Alice 回答的 $x$ 和 $y$,你能否构造出一个 Alice 的代码,使得 $x$ 和 $y$ 的值都正确?
输入格式
第一行包含一个整数 $t$($1\le t\le 1000$),表示测试用例的数量。接下来的 $2t$ 行描述每个测试用例。
每个测试用例的第一行包含三个整数 $n, x, y$($1\le n\le 10^5, 0\le x\le y\le n$),表示代码的长度,以及 Alice 回答的两个值。
第二行包含 $n$ 个整数 $b_1,\ldots,b_n$($1\le b_i\le n+1$),表示 Bob 的猜测,其中 $b_i$ 是第 $i$ 个位置的颜色。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
对于每个测试用例,第一行输出 "YES"(如果存在满足条件的秘密代码),否则输出 "NO"。输出时不区分大小写。
如果答案是 "YES",则在下一行输出 $n$ 个整数 $a_1,\ldots,a_n$($1\le a_i\le n+1$),表示 Alice 的秘密代码,其中 $a_i$ 是第 $i$ 个位置的颜色。
如果有多种方案,输出任意一种即可。
说明/提示
第一个测试用例在题目描述中已经给出。
第二个测试用例中,$x=3$,因为在第 $2,4,5$ 个位置颜色相同。$y=4$,因为两个序列共有 $1,1,1,2$ 这四个颜色。
第三个测试用例中,$x=0$,因为没有任何位置颜色相同。但 $y=4$,因为两个序列共有 $3,3,5,5$ 这四个颜色。
第四个测试用例可以证明无解。
由 ChatGPT 4.1 翻译