P12202 [COI 2022] 回文子串 / Madioničar
题目背景
译自 [HIO (COI) 2022](https://hsin.hr/hio2022/zadaci/) T1。
题目描述
**这是一道交互题**。本题中,交互库是非自适应的。
魔术师 Malnar 需要确定志愿者想象的单词的最长回文子串长度。单词由 $N$ 个小写字母组成,你需要通过以下交互过程推断出最长回文子串的长度 $L$:
1. **提问**:输出 `? l r`,询问区间 $[l, r]$ 的子串是否是回文,程序会返回 $1$(是回文)或 $0$(不是回文),最多允许提问 $200000$ 次。
2. **回答**:确定最长回文子串长度 $L$ 后,输出 `! L` 并结束程序。
### 交互规则
- 所有输出后需立即刷新缓冲区(例如 Python 使用 `flush=True`)。
- 输入中的 $N$ 表示单词长度,所有区间 $[l, r]$ 需满足 $1 \leq l \leq r \leq N$。
输入格式
输入仅在第一行包含一个整数 $N$,表示单词长度,后续交互通过提问和回答进行(详见样例)。
输出格式
- 每行提问格式为 `? l r`。
- 最终答案格式为 `! L`。
说明/提示
### 输入输出样例
**交互过程:**
| 程序输出 | 输入(程序回答) | 说明 |
|--------------|------------------|----------------------------------------------------------------------|
| `? 1 1` | `1` | 询问单字符子串 `n` 是否是回文(是)。 |
| `? 2 3` | `0` | 询问子串 `ev` 是否是回文(否)。 |
| `? 2 4` | `1` | 询问子串 `eve` 是否是回文(是)。 |
| `? 3 5` | `0` | 询问子串 `ven` 是否是回文(否)。 |
| `? 1 5` | `1` | 询问整个单词 `neven` 是否是回文(是)。 |
| `! 5` | | 确定最长回文子串长度为 5。 |
**样例解释:**
志愿者想象的单词为 neven,其最长回文子串为整个字符串,长度为 $5$。
### 数据规模与约定
对于所有数据,满足 $1 \leq N \leq 100000$。
**子任务及分值**:
| 子任务 | 分值 | 限制条件 |
|--------|------|-----------------------------------------------|
| $1$ | $13$ | $N \leq 7500$ |
| $2$ | $25$ | $N \leq 65000$ |
| $3$ | $25$ | $N \leq 100000$,单词仅由 `a` 和 `b` 组成 |
| $4$ | $37$ | $N \leq 100000$,无额外限制 |
### 提示
- 回文的定义为正读和反读相同的字符串。