#CF2118F. 移位与交换
移位与交换
F. 移位与交换
每次测试的时间限制:6 秒
每次测试的内存限制:512 兆字节
给你两个长度为 的数组 和 ,以及一个整数 。
数组只包含从 到 的整数,并且两个数组都包含从 到 的所有整数。
你可以对数组 反复执行以下两种操作中的任意一种:
-
循环左移:将数组向左循环移位一次。
∗ 对于一个长度为 的零索引数组 ,左循环移位一次后得到数组 ,满足 ,其中 。 -
交换相邻元素:如果两个相邻元素的差至少为 ,则可以交换它们。
问:能否将第一个数组变成第二个数组?
输入格式
每个测试点包含多个测试用例。第一行包含测试用例的数量 ()。
接下来每个测试用例的描述如下:
- 第一行包含两个整数 和 (),分别表示数组长度和 中不同整数的个数。
- 第二行包含 个整数 (),表示数组 。
- 第三行包含 个整数 (),表示数组 。
保证两个数组都包含从 到 的所有整数。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,如果可以将第一个数组变为第二个数组,输出 "YES",否则输出 "NO"。
大小写不敏感(例如 "yEs"、"yes"、"Yes"、"YES" 均视为肯定回答)。
示例输入
8
3 3
1 2 3
3 2 1
4 3
1 1 2 3
1 2 2 3
4 4
1 3 2 4
2 3 4 1
6 3
1 1 2 1 2 3
2 1 1 2 3 1
5 4
2 3 4 1 1
3 2 1 1 4
9 7
2 4 6 7 3 1 5 4 6
6 7 3 5 6 4 2 4 1
9 8
8 3 5 6 5 4 1 7 2
7 5 3 5 8 4 6 2 1
8 6
2 1 5 4 6 3 5 4
6 1 5 2 4 5 3 4
示例输出
YES
NO
YES
NO
YES
YES
NO
NO
示例解释
在第一个测试用例中,可以通过以下步骤将数组 变成数组 :
- — 左移一次 →
- 交换第 2 个和第 3 个元素(注意题目中索引从 1 开始,差为 ,允许交换) →
- 左移一次 →
- 左移一次 →
在第二个测试用例中,可以证明不可能通过给定操作将数组 变成数组 。