这是一个 run-twice(通信)题。
灵梦有一个大小为 $$$n$$$ 的整数集合 $$$S$$$,为了防止魔理沙偷走其中的 $$$k$$$ 个数字,灵梦需要提前记录下 $$$k$$$ 个数字来防止她忘记被偷走的数字是什么。
也就是说,刚开始灵梦知道这 $$$n$$$ 个数字,并且知道魔理沙将会偷走其中的 $$$k$$$ 个数字,但是她不知道魔理沙具体会偷走哪些数字。灵梦会偷偷藏下 $$$k$$$ 个数字来应对魔理沙的偷窃行为。
当魔理沙把 $$$k$$$ 个数字偷走后,灵梦要从剩下的 $$$n-k$$$ 个数字以及她私藏的 $$$k$$$ 个数字中,还原出魔理沙偷走的 $$$k$$$ 个数字。
你的任务是设计一种策略,帮助灵梦来应对魔理沙。
第一次运行:
输入的第一行首先包含 first。这样做的目的是让你的程序认识到这是它的第一次运行,并且它应该充当刚开始的灵梦。
每个测试点包含多个测试用例。第一行包含一个整数 $$$t\ (1 \le t \le 1000)$$$,表示测试用例的数量。
每个测试点的第一行包含两个整数 $$$n,k\ (2 \le n \le 10^5, 1 \le k \le \min(n-1, 5000))$$$,表示灵梦初始拥有的数字个数和魔理沙将会偷走的数字个数。
接下来一行包含 $$$n$$$ 个两两不同的整数 $$$a_1,a_2,\cdots,a_n$$$ $$$(0 \le a_i \lt 2^{29})$$$,表示灵梦初始拥有的数字。
保证所有测试数据 $$$n$$$ 之和不超过 $$$10^5$$$,$$$k$$$ 之和不超过 $$$5000$$$。
第二次运行:
输入的第一行首先包含 second。这样做的目的是让你的程序认识到这是它的第二次运行,并且它应该充当数字被偷走的灵梦。
每个测试点包含多个测试用例。第一行包含一个整数 $$$t\ (1 \le t \le 1000)$$$,表示测试用例的数量。
每个测试点的第一行包含两个整数 $$$n,k\ (2 \le n \le 10^5, 1 \le k \le \min(n-1, 5000))$$$,表示灵梦初始拥有的数字个数和魔理沙已经偷走的数字个数。
接下来一行包含 $$$n-k$$$ 个两两不同的整数 $$$a_1,a_2,\cdots,a_{n-k}$$$ $$$(0 \le a_i \lt 2^{29})$$$,表示灵梦被偷走后剩下的数字。
接下来一行包含 $$$k$$$ 个整数 $$$b_1,b_2,\cdots,b_{k}$$$ $$$(0 \le b_i \lt 2^{30})$$$,表示灵梦私藏的数字。
保证所有测试数据 $$$n$$$ 之和不超过 $$$10^5$$$,$$$k$$$ 之和不超过 $$$5000$$$。
第一次运行:
对于每个测试用例,输出一行 $$$k$$$ 个整数 $$$b_1,b_2,\cdots,b_{k}$$$ $$$(0 \le b_i \lt 2^{30})$$$,表示灵梦私藏的数字。
第二次运行:
对于每个测试用例,输出一行 $$$k$$$ 个两两不同的整数 $$$c_1,c_2,\cdots,c_{k}$$$ $$$(0 \le c_i \lt 2^{29})$$$,表示魔理沙偷走的数字,输出数字的顺序可以是任意的。
注意:非 C++ 语言在程序输出之后需要刷新缓冲区,否则你会得到 IDLENESS_LIMIT_EXCEEDED。
first 2 4 1 1 2 3 4 6 3 11 45 14 19 198 10
4 114514 1919 810
second 2 4 1 2 3 4 4 6 3 11 19 10 114514 1919 810
1 45 198 14