CF1543D1 RPD and Rap Sheet (Easy Version)

题目描述

这是该问题的简单版本。唯一的区别在于这里 $k=2$。只有当你同时解决了该问题的两个版本时,你才能进行 Hack。 这是一个交互题。 每个十进制数都有一个 $k$ 进制的等价形式。$k$ 进制数的每一位被称为 $k$-it。我们定义两个 $k$-it $a$ 和 $b$ 的 $k$-itwise XOR 为 $(a + b)\bmod k$。 两个 $k$ 进制数的 $k$-itwise XOR 等于将它们对应 $k$-it 的 $k$-itwise XOR 组成的新数。两个十进制数 $a$ 和 $b$ 的 $k$-itwise XOR 记作 $a\oplus_{k} b$,它等于这两个数的 $k$ 进制表示对应位做 $k$-itwise XOR 后再转回十进制的结果。除非特别说明,下面所有的数都用十进制表示。当 $k=2$(本题始终如此)时,$k$-itwise XOR 就是[按位异或](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 你已经入侵了 Rockport 警察局(RPD)的犯罪数据库,也就是 Rap Sheet。但要访问它,你需要一个密码。你并不知道密码,但你很确定它在 $0$ 到 $n-1$ 之间(包含 $0$ 和 $n-1$)。于是你决定去猜。幸运的是,你最多可以尝试 $n$ 次而不会被系统封锁。但系统是自适应的。每当你猜错一次,密码就会被更改。具体来说,如果猜测前的密码是 $x$,你猜了另一个数 $y$,那么系统会将密码更改为 $z$,使得 $x\oplus_{k} z = y$。请你猜出密码,闯入系统。

输入格式

输入的第一行包含一个整数 $t$($1\leq t\leq 10\,000$),表示测试用例的数量。接下来有 $t$ 组测试用例。 每个测试用例的第一行包含两个整数 $n$($1\leq n\leq 2\cdot 10^5$)和 $k$($k=2$)。 保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。

输出格式

对于每个测试用例,首先读入两个整数 $n$ 和 $k$。然后你最多可以询问 $n$ 次。 每次询问,你需要输出一个整数 $y$($0\leq y\leq 2\cdot 10^7$)。设当前密码为 $x$。随后你会读入一个整数 $r$。 如果 $x=y$,你会读入 $r=1$,该测试用例结束。你需要继续解决剩下的测试用例。 否则,你会读入 $r=0$。此时密码会被更改为 $z$,满足 $x\oplus_{k} z = y$。 每次输出询问后,不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 的判定。 具体操作如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其它语言请查阅相关文档。 如果你进行了非法的询问或超过了 $n$ 次询问,你会读入 $r=-1$ 并收到 Wrong Answer 判定。请立即退出以避免意外判定。 注意,交互器是自适应的。也就是说,初始密码并不是固定的,可能会根据你的询问动态变化。但保证在任何时刻,至少存在一个初始密码,使得所有询问的答案都是一致的。 Hack 说明: Hack 时请使用如下格式: 第一行包含一个整数 $t$($1\leq t\leq 10\,000$),表示测试用例数量。 每个测试用例的第一行包含两个整数 $n$($1\leq n\leq 2\cdot 10^5$)和 $k$($k=2$),分别表示可询问次数和进制。自适应交互器会自动决定最优初始密码。 你必须保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。

说明/提示

在示例测试用例中,隐藏的密码是 $2$。 第一次询问是 $3$,不等于当前密码,所以返回 $0$,密码变为 $1$,因为 $2\oplus_2 1=3$。 第二次询问是 $4$,不等于当前密码,所以返回 $0$,密码变为 $5$,因为 $1\oplus_2 5=4$。 第三次询问是 $5$,等于当前密码,所以返回 $1$,任务完成。 注意,这个初始密码只是为了说明方便。你提交时,交互器可能会有不同的行为,因为它是自适应的。 由 ChatGPT 4.1 翻译