子串询问恢复排列¶
时间限制:0.5 秒。内存限制:128 MiB。参考 评测环境与性能。
背景故事¶
档案柜隐藏着一列编号。终端不直接显示这列编号,但会比较你提交的编号串与隐藏序列,返回最长连续匹配的长度。利用有限次数的比较恢复整列编号。
(本故事由GPT-6重写)
形式化问题描述¶
这是一道交互题。评测器在交互开始前固定一个 \(1,\ldots,n\) 的排列 \(p\) ,其中 \(1\le n\le120\) .
你可询问一个长度 \(1\le k\le100\) 的整数序列 \(q\) ,每项都在 \([1,n]\) 内,允许重复。评测器返回 \(q\) 与 \(p\) 的最长公共连续子串长度:最大的 \(d\) ,使某段连续的 \(d\) 个元素在两个序列中完全相同。没有公共元素时该值为零。顺序必须相同,不是子序列,也不把排列首尾相接。
最多询问800次,最后报告整个排列。最终报告不计作询问。
输入格式¶
程序首先读取一个整数 \(n\) .每次发送合法询问并刷新输出后,读取一个整数回复。收到 \(-1\) 或输入结束时应立即退出。隐藏排列不会作为提交程序的输入提供。
输出格式¶
询问输出一行 ? k q_1 ... q_k ;最终输出一行 ! p_1 ... p_n ,随后退出。每行发送后必须刷新输出。长度、值域、格式或询问次数非法,以及最终排列错误,均判为失败。
下面的样例用于随题本地交互器:输入文件包含 \(n\) 和隐藏排列,输出块列出应恢复的排列。它们不是可以直接重定向给 std.cpp 的交互输入流。运行方式见本地测试说明。
样例 1¶
输入¶
1
1
输出¶
1
样例 2¶
输入¶
4
2 1 4 3
输出¶
2 1 4 3
样例 3¶
输入¶
3
3 2 1
输出¶
3 2 1
样例解释¶
样例2隐藏 \([2,1,4,3]\) .询问 ? 5 1 2 1 4 1 会得到3,因为连续串 \([2,1,4]\) 同时出现。最终报告为 ! 2 1 4 3 .
重复枢轴1的询问可以检查候选编号是否与1相邻;匹配是连续且有方向的。
数据范围与保证¶
\(1\le n\le120\) .每次询问长度不超过100,总询问次数不超过800。
规格重新设计:Codex(GPT-6);补全文本交互协议、刷新及终止规则、本地隐藏数据格式。
| 分值 | 额外限制 |
|---|---|
| 20% | \(n\le8\) |
| 30% | \(n\le50\) |
| 50% | 无额外限制 |