CF2131C Make it Equal

题目描述

给定两个大小为 $n$ 的多重集 $S$ 和 $T$,以及一个正整数 $k$,你可以对 $S$ 进行如下操作任意次(包括零次): - 选择 $S$ 中的一个元素 $x$,移除 $S$ 中的一个 $x$,然后可以将 $x+k$ 或 $|x-k|$ 插入到 $S$ 中。 请判断是否有可能通过若干次操作使 $S$ 等于 $T$。当且仅当 $S$ 和 $T$ 中每个元素出现的次数都相同,两个多重集才相等。

输入格式

每组测试数据包含多组测试用例。第一行为一个整数 $t$($1 \le t \le 10^4$),表示测试用例的组数。每组测试用例描述如下: 第一行包含两个整数 $n$ 和 $k$($1 \le n \le 2 \cdot 10^5$,$1 \le k \le 10^9$),分别表示 $S$ 和 $T$ 的大小以及常数 $k$。 第二行包含 $n$ 个整数 $S_1, S_2, \ldots, S_n$($0 \le S_i \le 10^9$),表示 $S$ 中的元素。 第三行包含 $n$ 个整数 $T_1, T_2, \ldots, T_n$($0 \le T_i \le 10^9$),表示 $T$ 中的元素。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每组测试用例,如果可以通过若干次操作使 $S$ 等于 $T$,输出 "YES";否则输出 "NO"。 你可以用任意大小写输出答案(如 "yEs", "yes", "Yes", "YES" 都会被识别为肯定回答)。

说明/提示

在第一个测试用例中,我们可以从 $S$ 中移除一个 $1$,并插入 $|1-k|=|1-3|=2$,此时 $S$ 就等于 $T$。 在第二个测试用例中,我们可以从 $S$ 中移除一个 $4$,并插入 $4+k=4+8=12$,此时 $S$ 就等于 $T$。 在最后一个测试用例中,可以证明无法通过操作使 $S$ 等于 $T$。 由 ChatGPT 4.1 翻译