题库练习 Intercepting Butterflies
← 上一题 下一题 →

A16738 | Intercepting Butterflies

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

本题是一道运行两次(通信)类题目。

Alice 手中有一个整数 $x$,其中 $1 \le x \le 2^{15}$。她需要将这个整数发送给月球上的 Bob,因为这是他们月球秘密项目的重要参数。

幸运的是,Alice 有一个秘密存储装置 $S$,其中包含集合 $\{1,2,\ldots,20\}$ 的一个(可能为空)子集。她准备将 $S$ 发送给 Bob。Bob 的目标是仅靠 $S$ 恢复出 $x$ 的值。

但在 Alice 发送 $S$ 并在 Bob 接收 $S$ 之前,神奇的蝴蝶劫持了飞船!当 Bob 最终收到 $S$ 时,会发生以下三种情况之一:

- 从 $S$ 中任意删除一个元素(只有在 $S$ 非空时才允许)。
- 向 $S$ 中任意添加一个元素(添加元素后 $S$ 仍需满足 $S \subseteq \{1,2,\ldots,20\}$)。
- $S$ 保持不变。

请你为 Alice 和 Bob 设计一个策略,使得无论 $S$ 遭遇了哪种情况,Bob 都能准确还原出 $x$ 的值。具体来说,本题你的代码将在每组数据被运行两次。在第一次运行时,你充当 Alice;第二次运行时,你充当 Bob。除了集合 $S$,Alice 不能向 Bob 传递任何额外信息。只有在第二次运行时你的代码能准确恢复每组的 $x$ 值,才能通过本题。

第一次运行

输入

第一行输入字符串 first,表示现在是第一次运行,你的程序应当模拟 Alice 的行为。

第二行输入一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。

接下来,每组测试用例一行,包含一个整数 $x$($1 \le x \le 2^{15}$)。

输出

对每一组测试用例,你应当输出两行,将 $S$ 发送给 Bob。

- 第一行输出一个整数 $n$($0 \le n \le 20$),表示 $S$ 的大小。
- 第二行输出 $n$ 个两两不同的,用空格分隔的整数 $S_1,S_2,\ldots,S_n$($1 \le S_i \le 20$)。

特别地,当 $n=0$ 时可省略第二行。$S$ 的元素可以任意顺序输出,但必须互不相同。

然后程序将自动进入下一组测试用例,或者已完成所有测试用例则结束。

第二次运行

输入

第一行输入字符串 second,表示现在是第二次运行,你的程序应当模拟 Bob 的行为。

第二行输入一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。注意,该数字和第一次运行中输入的 $t$ 相同。

每组测试用例输入如下两行:

第一行输入一个整数 $n'$($0 \le n' \le 20$),表示 Bob 实际收到的集合 $S'$ 的大小($S'$ 可能是被更改过的 $S$)。

第二行输入 $n'$ 个递增排列的整数 $S'_1, S'_2, \ldots, S'_{n'}$($1 \le S'_i \le 20$),表示 Bob 实际收到的 $S'$ 集合。即使 Alice 输出的 $S$ 未按递增排列,Bob 收到的一定是递增排序好的。

注意:第二次运行中的测试用例顺序可能发生了打乱。详见输入输出样例。

输出

对于每一组测试用例,输出一行,包含 Alice 发来的对应的整数 $x$($1 \le x \le 2^{15}$)。

输入格式

输出格式

输入输出样例

输入 #1
first
4
1
20
50
32768
输出 #1
0

3
13 4 9 
4
1 7 4 2
10
14 17 1 6 2 19 20 8 7 18
C++ 编辑器
输入
输出