P12989 [GCJ 2022 #1B] ASeDatAb

题目描述

一个研究联盟花费三年时间寻找最佳数据库,但仍存在问题。该数据库以 8 位二进制字符串形式存储记录值。遗憾的是,他们实现记录值设置功能的方式存在缺陷。 数据库的每条记录都是一个 8 位二进制字符串,其位索引从左到右为 0 至 7。当收到将特定记录设置为新值 $V$ 的指令时,数据库并不会直接将其设为 $V$,而是执行以下操作: 1. 选择一个 0 到 7 之间的整数 $r$,并生成 $V$ 向右循环移动 $r$ 位后的值 $W$。即 $W$ 的第 $((i + r) \bmod 8)$ 位等于 $V$ 的第 $i$ 位。 2. 将记录的当前值 $X$ 更新为 $X$ 与 $W$ 的异或值(即新值的第 $i$ 位为 1 当且仅当 $X$ 和 $W$ 的第 $i$ 位不同)。 3. 最后向用户返回新值中 1 的位数。 幸运的是,无论初始值如何或数据库如何选择旋转值,总能通过不超过 300 次操作将记录值重置为全 0。请编写一个程序与数据库交互完成此任务。 ### 交互协议 本题为交互题。 初始时,你的程序应读取一个整数 $\mathbf{T}$ 表示测试用例数量,随后处理 $\mathbf{T}$ 个测试用例。 每个测试用例开始时,数据库记录会被设为非 $00000000$ 的值。每个测试用例中,你的程序最多可进行 300 轮交互。 每轮交互流程: 1. 你输出一个 8 位二进制字符串作为操作值 $V$ 2. 评测系统执行前述操作后,返回一个整数 $\mathbf{N_{i}}$ 表示更新后记录值中 1 的位数 - 若 $\mathbf{N_{i}}=0$ 表示成功,应开始下一测试用例(或程序终止) - 若 $\mathbf{N_{i}}=-1$ 表示第 300 次操作仍未归零,测试失败(后续用例不再处理) - 若 $1 \leq \mathbf{N_{i}} \leq 8$ 可继续尝试 只有当所有测试用例均成功将记录值归零时,解答才被视为正确。 若检测到非法输出,评测系统将返回 -1 并终止。收到 -1 后需正常退出以避免资源错误判定。

输入格式

参见交互协议。

输出格式

参见交互协议。

说明/提示

可使用测试工具进行本地测试(需与代码并行运行)。工具说明详见其注释,注意该工具**并非**真实评测系统。 **数据范围** - $1 \leq \mathbf{T} \leq 100$ - $-1 \leq \mathbf{N_{i}} \leq 8$ **测试集 1(25 分,可见判定)** - 初始值为均匀随机生成的非全零 8 位二进制数 - 旋转值均为独立均匀随机选择 **测试集 2(15 分,可见判定)** - 评测系统采用对抗策略(可动态调整初始值和旋转值) - 保证初始值不为全零 翻译由 DeepSeek V3 完成