luogu#P16559. [ICPC 2026 APC] Compare Suffixes

[ICPC 2026 APC] Compare Suffixes

题目描述

评测程序拥有一个长度为 nn 的隐藏字符串 SS ,该字符串仅包含小写拉丁字母(a–z)。你无法直接访问这个字符串。开始时,你只知道字符串 nn 的长度。

你的任务是通过有限次询问,确定所有 nn 个后缀的排列顺序。

对于一个整数 kk (1kn1\le k \le n),S(k)S(k) 表示从第 kk 个字符开始的 SS 的后缀。特别地,S(1)=SS(1)=S

在一次询问中,你可以指定两个不同的整数 iijj。评测程序会按字典序比较 S(i)S(i)S(j)S(j),并返回 S(i)<S(j)S(i)<S(j) 还是 S(i)>S(j)S(i)>S(j)。注意,对于 iji\ne j 的情况,不会出现相等,因为所有后缀都是不同的。

请找出一个 (p1,p2,,pn)(p_1,p_2,\ldots,p_n) 的排列,使得 S(p1)<S(p2)<<S(pn)S(p_1)<S(p_2)<\cdots<S(p_n)

输入格式

交互方式

输入的第一行包含一个整数 nn2n10002 \le n \le 1000)。

要发出一个查询,你的程序应输出形式为“query ii jj”的一行(1in1 \le i \le n1jn1 \le j \le niji \ne j)。随后,将出现一行输入,其中包含 first 或 second。包含 first 的行表示 S(i)<S(j)S(i) \lt S(j),而包含 second 的行表示 S(i)>S(j)S(i) \gt S(j)

一旦确定了后缀的排序,你的程序应输出形式为 “answer p1 p2  pnp_1\ p_2\ \ldots\ p_n” 的行。之后,交互结束,你的程序应终止运行且不再输出任何内容。

你的程序最多可发出 62606260 次查询。若查询次数超过 62606260 次,将被判定为“答案错误”。

保证隐藏字符串 SS 仅由小写字母(a–z)组成。

关于交互式评分的说明:

  • 交互库不是自适应的,即字符串 SS 是预先确定的,而非根据你的查询动态生成的。
  • 写入输出缓冲区后,请务必清空缓冲区。
  • 附件中为你提供了用于本地测试的命令行工具,以及与示例交互对应的输入文件。你可以下载这些文件。该工具顶部附有注释说明其使用方法。
4

first

second

first
query 2 1

query 2 4

query 1 3

answer 4 2 1 3

提示

样例交互解释 #1

在本样例中,假设 S=icpcS=\texttt{icpc}。四个后缀的字典序排列为 S(4)<S(2)<S(1)<S(3)S(4)<S(2)<S(1)<S(3),因为 c<cpc<icpc<pc\texttt{c}<\texttt{cpc}<\texttt{icpc}<\texttt{pc}

在第一次和第三次询问中,返回 first,因为 S(2)<S(1)S(2)<S(1) 并且 S(1)<S(3)S(1)<S(3)。在第二次询问中,返回 second,因为 S(2)>S(4)S(2)>S(4)。通过这些回复你可以确定各后缀的顺序。

由 ChatGPT 5 翻译