CF2038G Guess One Character

题目描述

这是一个交互题。你需要在每次输出后立即进行刷新操作。例如,在 C++ 中应使用函数 fflush(stdout) 或 cout.flush(),在 Java 或 Kotlin 中使用 System.out.flush(),在 Python 中使用 sys.stdout.flush()。 评测程序有一个由字符 $0$ 和/或 $1$ 组成的字符串 $s$,其长度为 $n$。 你可以进行如下询问: - $1\ t$ —— “字符串 $t$ 在 $s$ 中作为连续子串出现了多少次?”其中 $t$ 是一个由 $0$ 和/或 $1$ 组成的字符串,长度至少为 $1$,至多为 $n$。例如,如果 $s=111011$,$t=11$,则该询问的答案为 $3$。 你需要通过不超过 $3$ 次询问,猜出字符串 $s$ 中至少一个字符。注意,给出答案不计入询问次数。 在每个测试和每个测试用例中,字符串 $s$ 都是预先固定的。

输入格式

评测程序首先输出一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。 在每个测试用例开始时,评测程序输出一个整数 $n$($2 \le n \le 50$),表示字符串的长度。 之后,你的程序可以向评测程序提交如下格式的询问(每次输出后请务必刷新输出): - $1\ t$,表示询问“字符串 $t$ 在 $s$ 中作为连续子串出现了多少次?” 对于每个询问,评测程序会在单独一行输出一个整数,可能为: - 该询问的答案(如果询问合法且未超过本用例的询问次数限制); - 或 $-1$,如果询问不合法(例如 $1 \le |t| \le n$ 不满足,或 $t$ 中包含非 $0$ 或 $1$ 的字符),或者在当前测试用例中询问次数已超限。 要提交答案,你的程序应输出如下格式的一行(输出后请务必刷新输出): - $0\ i\ c$,其中 $1 \le i \le n$,$c$ 为 $0$ 或 $1$,表示你猜测 $s_i = c$。 如果你的猜测正确,评测程序会在单独一行输出 $1$,表示你可以进入下一个测试用例(或程序结束,如果已是最后一个用例),且询问次数重置。如果猜测错误,评测程序会输出 $-1$。 当你的程序收到 $-1$ 作为响应时,应立即终止程序,否则会被判为“Wrong Answer”。如果程序未终止,评测结果将不确定。

输出格式

无。

说明/提示

例如,有 $3$ 个测试用例:101、11 和 10。注意,所有 // 后的内容都是注释,用于解释每一行的含义,实际评测程序不会输出这些注释,你的程序也不应输出。空行仅为方便阅读,实际评测程序不会输出空行,你的程序也不应输出空行。 由 ChatGPT 4.1 翻译