CF1520F1 Guess the K-th Zero (Easy version)
题目描述
这是一个交互题。
这是该题的简单版本。与困难版本的区别在于,简单版本中 $t=1$,且查询次数限制为 $20$ 次。
Polycarp 正在玩一款电脑游戏。在这款游戏中,隐藏着一个由 $0$ 和 $1$ 组成的数组。如果 Polycarp 能够猜出从左往右第 $k$ 个 $0$ 的位置 $t$ 次,他就能获胜。
Polycarp 最多可以进行 $20$ 次如下类型的请求:
- ? $l$ $r$ —— 查询区间 $[l, r]$($1 \le l \le r \le n$)内所有元素之和。
在本题(简单版本)中,由于 $t=1$,下述内容其实没有实际意义。为了让游戏更有趣,每当猜中一个 $0$ 时,该位置的 $0$ 会变成 $1$,游戏会在修改后的数组上继续进行。更正式地说,如果第 $k$ 个 $0$ 的位置是 $x$,那么在 Polycarp 猜中该位置后,数组的第 $x$ 个元素会从 $0$ 变为 $1$。当然,这一特性仅在 $t>1$ 时才会产生影响。
请帮助 Polycarp 赢得这场游戏。
输入格式
首先,你的程序需要读取两个整数 $n$ 和 $t$($1 \le n \le 2 \times 10^5$,$t=1$)。
接下来有 $t$ 行,每行包含一个整数 $k$($1 \le k \le n$)。保证在每次请求时,数组中至少有 $k$ 个 $0$。你必须在输出当前 $k$ 的答案后,才能获得下一个 $k$ 的值。
之后,你最多可以进行 $20$ 次请求。
输出答案时请使用如下格式(这不是一次请求,不计入 $20$ 次限制):
- ! $x$ —— 表示第 $k$ 个 $0$ 的位置。
数组下标从 $1$ 到 $n$,从左到右编号。
输出完 $t$ 个答案后,你的程序应立即退出。
在本题中,交互器是非自适应的。这意味着在同一测试中,隐藏数组和查询不会发生变化。
如果请求格式错误,将会输出 $-1$。收到该值后,你的程序必须立即正常退出(例如调用 exit(0)),否则评测系统可能会给出任意判定。
如果请求次数超出限制,将会判定为 wrong answer。
如果你没有输出任何内容或忘记刷新输出缓冲区,可能会得到 Idleness limit exceeded 的判定。
在输出请求和换行符后,请立即刷新输出缓冲区:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其它语言请查阅相关文档。
Hack 格式
Hack 时请使用如下格式:
第一行输出字符串 $s$($1 \le |s| \le 2 \times 10^5$),由 $0$ 和 $1$ 组成,以及整数 $t$($t=1$)——即隐藏数组和请求次数。接下来 $t$ 行,每行输出一个整数 $k$($1 \le k \le |s|$)。
被 Hack 的解答无法直接访问隐藏数组。
输出格式
(见上文)
说明/提示
在第一个测试中,隐藏数组为 $[1, 0, 1, 1, 0, 1]$。本测试中 $k=2$。
由 ChatGPT 4.1 翻译