P17698 反转

题目背景

题目来源:【HT-129-Div.1】核桃省选模拟赛 提交到洛谷上时,无需引用头文件 `#include "reversal.h"`。直接将 ``` std::pair solve(int n); int query(const std::string &S); ``` 复制到程序开头,同时选用 C++17 或者更高版本编译器编译。

题目描述

**这是一道函数式交互题。** 交互库中有一个隐藏的区间 $[l,r]$,其中 $1\le l

输入格式

### 【测试程序方式】 `sample.in` 的格式为: ```text n l r mask ``` 其中,$[l,r]$ 为本地 grader 使用的隐藏区间。 若第 $k+1$ 次 `query` 的合法非零回复为 $\min T$ 和 $\max T$,则 `mask` 从低到高的第 $k$ 个二进制位决定返回哪一个:该位为 $0$ 时返回 $\min T$,为 $1$ 时返回 $\max T$。 若该次询问返回 $0$,对应二进制位不会影响结果。 若需要覆盖前 $5$ 次询问的全部左右回复方式,可以固定 $n,l,r$,并令 `mask` 依次取 $0,1,\ldots,31$。 本地 `grader.cpp` 仅用于调试;正式评测使用更强的对抗交互库,但 `reversal.h` 中的接口完全相同。

输出格式

无

说明/提示

### 【数据范围】 本题共有 $3$ 个测试点。一个测试点中的所有数据组均需正确完成,否则该测试点得 $0$ 分。 | 测试点编号 | 分值 | $n\le$ | |:-:|:-:|:-:| | $1$ | $10$ | $10$ | | $2$ | $20$ | $10^3$ | | $3$ | $70$ | $2\times 10^5$ | 对于 $100\%$ 的数据,保证 $2\le n\le 2\times 10^5$。 ### 【评分方式】 对于一个答案全部正确的测试点,设第 $i$ 组数据使用了 $Q_i$ 次询问,并令 $$ Q=\max_i Q_i. $$ 定义 $$ f(Q)= \begin{cases} 1, & Q\le 5,\\ 0.8^{Q-5}, & 6\le Q\le 15. \end{cases} $$ 若该测试点的分值为 $\mathrm{score}$,则你在该测试点获得 $\lfloor f(Q)\cdot \mathrm{score} \rfloor$ 分。 若某一组数据中答案错误、调用 `query` 的格式不合法、询问次数超过上限,或程序发生其他错误,则整个测试点得 $0$ 分。