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 翻译