CF1494C 1D Sokoban

题目描述

你正在玩一个类似于 Sokoban 的游戏,场地是一条无限的数轴。游戏是离散的,因此你只考虑数轴上的整数位置。 你从位置 $0$ 开始。有 $n$ 个箱子,第 $i$ 个箱子位于位置 $a_i$。所有箱子的位置互不相同。还有 $m$ 个特殊位置,第 $j$ 个特殊位置是 $b_j$。所有特殊位置也互不相同。 每一步你可以向左或向右移动一个位置。如果你移动的方向上有一个箱子,那么你会把这个箱子推到该方向的下一个位置。如果下一个位置上还有箱子,那么那个箱子也会被推到下一个位置,依此类推。你不能穿过箱子。你不能把箱子拉向自己。 你可以进行任意次数的移动(也可以不移动)。你的目标是让尽可能多的箱子停在特殊位置上。注意,有些箱子一开始就可能在特殊位置上。

输入格式

第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。 接下来是 $t$ 组测试用例的描述。 每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 2 \cdot 10^5$),分别表示箱子的数量和特殊位置的数量。 每个测试用例的第二行包含 $n$ 个递增的互不相同的整数 $a_1, a_2, \dots, a_n$($-10^9 \le a_1 < a_2 < \dots < a_n \le 10^9$,$a_i \neq 0$),表示箱子的初始位置。 每个测试用例的第三行包含 $m$ 个递增的互不相同的整数 $b_1, b_2, \dots, b_m$($-10^9 \le b_1 < b_2 < \dots < b_m \le 10^9$,$b_i \neq 0$),表示特殊位置。 所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$,$m$ 的总和也不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示最多可以有多少个箱子被放置在特殊位置上。

说明/提示

在第一个测试用例中,你可以向右移动 $5$ 步:位置 $1$ 的箱子被推到位置 $6$,位置 $5$ 的箱子被推到位置 $7$。然后你可以向左移动 $6$ 步,最终停在位置 $-1$,把一个箱子推到 $-2$。最后,箱子分别在位置 $[-2, 6, 7, 11, 15]$。其中 $[-2, 6, 7, 15]$ 是特殊位置,因此答案是 $4$。 在第二个测试用例中,你可以把 $-1$ 位置的箱子推到 $-10^9$,把 $1$ 位置的箱子推到 $10^9$,答案为 $2$。 第三个测试用例说明你不能拉箱子,因此无法将它们拉近特殊位置。 第四个测试用例中,所有箱子一开始就在特殊位置上,因此什么都不做也能得到答案 $3$。 第五个测试用例中,特殊位置比箱子少。你可以向右移动 $8$ 或 $9$ 步,使某个箱子到达位置 $10$。 由 ChatGPT 4.1 翻译