#loj5485. 「COI 2022」Mađioničar

「COI 2022」Mađioničar

AdditionalFile5485.zip

#5485. 「COI 2022」Mađioničar

标签: 交互 | 时间限制: 5000 ms | 内存限制: 512 MiB |

题目描述

译自 COI 2022 T1「Mađioničar

你可能听说过,马尔纳先生在业余时间会表演魔术。他最近在著名电视节目《Penn & Teller: Fool Us》中的亮相轰动了世界。他自称「神奇的马尔纳先生」,完成了一项令人难以置信的心理魔术,让所有人都为之倾倒。

他首先从观众中邀请了一位热情的志愿者,并请他们想一个由 NN 个字母组成的任意字符串。接着,他开始为观众表演,期间偶尔瞥一眼志愿者,最后他宣布:「你心中所想字符串的最长子回文串的长度为 LL'」。在志愿者确认这完全正确后,全场观众都惊呆了。

然而,细心的观众和马尔纳先生的密友们怀疑,这并非读心术,而是一种巧妙的措辞选择,再结合对面部表情的出色解读,从而获得了足够的信息来完成这个魔术。

虽然马尔纳先生看起来只是在随意表演,但他会时不时地提到某个数字区间 [l,r][l, r](其中 1lrN1 \leq l \leq r \leq N),并迅速地看一下志愿者。有传言说,他仅凭志愿者的面部表情,就能判断出其字符串中从第 ll 个到第 rr 个字母组成的子串(包含端点)是否为回文串。

你需要编写一个程序来证实,如果传言属实,马尔纳先生确实能够收集到足够的信息,以确定志愿者所选秘密字符串的最长子回文串。

交互方式

这是一道交互题。你的程序必须与一个由组织者制作的程序进行通信,该程序会模拟题目描述中志愿者的行为。

在交互开始前,你的程序应从标准输入读取一个整数 NN,即秘密字符串的长度。

之后,你的程序可以通过向标准输出写入内容来发送查询请求。每个查询必须输出在新的一行,格式为 ? l r,其中 1lrN1 \leq l \leq r \leq N。每次写入查询后,你的程序都应刷新输出流,然后从标准输入读取回答。回答为 11 表示子串 [l,r][l, r] 是回文串,为 00 则表示不是。你的程序最多可以进行 200000200000 次此类查询。

当你的程序推断出最长子回文串的长度后,应向标准输出写入一行,格式为 ! L,其中 LL 是该长度。之后,你的程序应再次刷新输出流并正常终止执行。

注意:你可以从「文件」中下载能够正确处理交互(包括刷新输出)的示例代码。

样例

输出 输入 注释
5 秘密字符串的长度为 55。在此样例中,志愿者选择的字符串是 neven
? 1 1 1 子串 n 是一个回文串。
? 2 3 0 子串 ev 不是一个回文串。
? 2 4 1 子串 eve 是一个回文串。
? 3 5 0 子串 ven 不是一个回文串。
? 1 5 1 子串 neven 是一个回文串。
! 5 正确,最长的子回文串是整个字符串 neven

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 1313 1N75001 \leq N \leq 7500
22 2525 1N650001 \leq N \leq 65000
33 2525 1N1000001 \leq N \leq 100000,秘密字符串仅由字母 ab 构成
44 3737 1N1000001 \leq N \leq 100000