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$ 分。