QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 1024 MB Total points: 40 Interactive

#12481. ASeDatAb

Statistics

一个研究联盟三年来一直在寻找最好的数据库,但他们仍然面临问题。该数据库将值存储为保存 8 位二进制字符串的记录。不幸的是,他们设置记录值的函数实现有缺陷。

数据库中的每条记录都是一个 8 位二进制字符串。二进制字符串的位从左到右索引为 0 到 7。当收到将特定记录设置为新值 $V$ 的指令时,数据库不会将值设置为 $V$,而是执行以下操作:

  1. 选择一个整数 $r$($0 \le r \le 7$),令 $W$ 为 $V$ 向右循环移动 $r$ 位后的结果。也就是说,$W$ 的第 $((i + r) \pmod 8)$ 位是 $V$ 的第 $i$ 位。
  2. 将记录的当前值 $X$ 替换为 $X \text{ XOR } W$。也就是说,如果 $X$ 和 $W$ 的第 $i$ 位不同,则新值的第 $i$ 位为 1。
  3. 最后,向用户返回新值中 1 的个数。

幸运的是,无论初始值是什么,或者数据库选择了什么旋转值,总能在不超过 300 次操作内将记录的值重置为全 0。请实现一个程序与数据库进行交互以完成此任务。

输入格式

这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。

首先,你的程序应读取一行,包含一个整数 $T$,即测试用例的数量。然后,处理 $T$ 个测试用例。

在每个测试用例开始时,数据库中的记录被设置为一个非 00000000 的值。在每个测试用例中,你的程序必须处理最多 300 次交换。

第 $i$ 次交换开始时,你输出一行,包含一个 8 位二进制字符串,作为上述操作的值 $V$。然后,评测程序执行描述的操作,并向你发送一行,包含一个整数 $N_i$,表示更新后记录中等于 1 的位数。

  • 如果 $N_i = 0$,意味着你已成功,必须开始下一个测试用例,或者如果这是最后一个用例,则结束程序。
  • 如果 $N_i = -1$,意味着这是该测试用例的第 300 次交换,但记录从未达到全 0 的值,因此测试失败。后续测试用例将不再处理。
  • 如果 $1 \le N_i \le 8$,意味着更新后的记录值有 $N_i$ 个 1,你可以继续进行下一次交换,尝试使其仅包含 0。

当且仅当你在所有测试用例中都成功将记录值设置为 00000000 时,你的解决方案才被认为是正确的。

如果评测程序在任何时刻收到格式错误或无效的行,评测程序将打印单个数字 $-1$ 并且不会打印任何进一步的输出。如果你收到 $-1$,你必须正确结束程序且不超过时间和内存限制,以获得错误判定。否则,你将收到关于资源超限或终止条件不正确的判定。

数据范围

$1 \le T \le 100$ $-1 \le N_i \le 8$(对于所有 $i$)

子任务

测试集 1(可见判定) 记录的初始值从所有非 00000000 的 8 位二进制字符串中均匀随机选择。 每个旋转值都是均匀随机选择的,且独立于之前的所有选择和交互。

测试集 2(可见判定) 评测程序是对抗性的。这意味着,除其他事项外,只要与所有交互一致,评测程序可以更改初始值或旋转值。保证初始值永远不会是 00000000

样例

样例交互

评测程序 你的程序
1
00110011
3
00011001
0

说明

样例交互中,记录初始值为 10000000。 评测程序选择 $r = 5$,将你给出的值旋转得到 10011001,然后执行 10011001 XOR 10000000 得到 00011001,这是记录的新值。 00011001 有 3 个 1。 评测程序选择 $r = 0$,这使得你的输入不旋转。由于它与记录的当前值一致,这导致记录变为 00000000。 评测程序通知你记录中没有 1,因此该用例完成。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.