#P15496. [ICPC 2025 APC] Minus Operator

[ICPC 2025 APC] Minus Operator

题目描述

对于二进制值 aabb,减号运算符定义如下:若 a=1a = 1b=0b = 0,则 (ab)=1(a - b) = 1;否则 (ab)=0(a - b) = 0。此外,表达式的语法定义如下。其中,x\mathbf{x}、括号和减号是终结符,EE 是起始符号。

$$\begin{aligned} E &::=\mathbf{x} \mid (E - E) \end{aligned}$$

评测程序持有一个符合 EE 语法的表达式。这个表达式对你来说是隐藏的。开始时,你只知道表达式中终结符 x\mathbf{x} 的个数,记为 nn

你的任务是通过有限次查询来猜出这个表达式。

每次查询,你需要指定一个长度为 nn 的二进制串 SS。然后评测程序会将从左到右第 ii 个终结符 x\mathbf{x} 临时替换为 SiS_ii=1,,ni = 1, \ldots, n),并根据减号运算符的定义计算替换后的表达式。之后,评测程序将计算结果(0011)返回给你。

输入格式

输入的第一行包含一个整数 nn3n2003 \le n \le 200)。读取该整数后,你的程序即可开始进行查询。对于每次查询,你的程序应输出一行,格式为 query S,其中 SS 是一个长度为 nn 的二进制串,每个字符必须是 0011。作为响应,输入中将有一行包含计算得到的值。

你的程序最多可以进行 500500 次查询。如果查询次数超过 500500,你将得到“答案错误”的评判结果。

当你的程序确定了评测程序所持有的表达式时,应输出一行,格式为 answer T,其中 TT 就是该表达式。之后,交互过程结束,你的程序应当终止。

在上述约束下,可以证明表达式可以被唯一确定。

关于交互式评测的说明:

  • 评测是非对抗性的,即表达式是预先选定的,而不是根据你的查询动态调整的。
  • 输出后不要忘记刷新输出缓冲区。详情请参见“评测细节”文档。
  • 我们提供了一个用于本地测试的命令行工具,以及对应于示例交互的输入文件。你可以从 DOMjudge 下载这些文件。该工具顶部有注释说明其用法。
3

0

query 111

answer ((x-x)-x)
4

0

1

query 0000

query 1001

answer ((x-x)-(x-x))

提示

示例交互 #1 的解释

n=3n = 3 时,只有两种可能的表达式:((xx)x)((\mathbf{x} - \mathbf{x}) - \mathbf{x})(x(xx))(\mathbf{x} - (\mathbf{x} - \mathbf{x}))。对于查询 s=111s = 111,这两种表达式的计算结果分别为:

  • ((11)1)=(01)=0((1 - 1) - 1) = (0 - 1) = 0,以及
  • (1(11))=(10)=1(1 - (1 - 1)) = (1 - 0) = 1

在此示例中,评测程序返回 00,表明第一个表达式是正确的。

翻译由 DeepSeek 完成