QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: Anonymous

Posted at: 2026-03-14 17:53:19

Last updated: 2026-03-14 17:53:28

Back to Problem

《夜空》解题报告

首先将序列首尾相连(约定逆时针为序列延伸的方向),则每次操作可等价刻画为:

  1. 将指针向左移动两位,并将扫过的两个元素合并为它们的异或和。
  2. 将指针向右移动两位,并将扫过的两个元素合并为它们的异或和。

接下来刻画分段方案。 一个分段方案可由如下过程定义:在首尾相连的序列上选定若干位置切断,然后选择某个断点作为终点。 其含义为:每个段对应最终得到的序列中的一个元素,而终点表示最终指针的位置。沿着指针所在位置向逆时针方向读取,即得到最终的序列。

结论 1:长度大于 $1$ 的段必须彼此相连,且必须与起点相连。

证明: 被指针扫过并合并的段,其长度均大于 $1$,而指针在移动过程中扫过的区间一定是连续的,因此这些段必然连续,且必须包含移动的起点。

记包含起点的段为“特殊段”(即同时涵盖了原序列 $a_1$ 和 $a_n$ 所在合并块的段)。注意可能不存在特殊段。 对于非特殊段,指针每次必然从某一侧进入,并从某一侧(或同侧)离开。

结论 2:非特殊段的段长不能是 $3$ 的倍数。 定义长度能表示为 $3k+1$ 的段为 A 类段,长度能表示为 $3k+2$ 的段为 B 类段。

证明: 对非特殊段的每个元素按顺序循环赋予标记 $1,2,3,1,2,3,\cdots$。每次操作,指针都会跨越并扫过两个不同标记的元素,将它们进行合并。由于最终该段只留下一个元素,且该元素等于段内原序列值的异或和,这意味着段的长度一定不能是 $3$ 的倍数。

可以观察到,若指针从同侧进出,实际不改变该段对 $3$ 取模的余数;若从异侧进出,则会改变。因此,A 类段实质上是指针异侧进出偶数次的段,B 类段是指针异侧进出奇数次的段。

结论 3:若存在特殊段,将其删去并断开成链;若不存在,则直接从起点断开成链。处理后,A 类段与 B 类段将分别构成连续的一段,且它们的分界点恰好为终点。

证明: 指针移动的连续性决定了进出侧的奇偶性在终点两侧呈现出不同的规律,因此同类段必然连续出现。

考虑特殊段的限制。若将标记循环顺序视为:

$$ \cdots 3 2 1 3 2 1 | 1 2 3 1 2 3 \cdots $$

在模 $3$ 意义下,起点两侧总有一侧多出两个数。指针必然从这一侧多离开一次,从而引出 B 类段。

结论 4:对于一个特殊段,设从起点向顺时针和逆时针方向分别有 $l$ 和 $r$ 个元素,则必有 $l \not\equiv r \pmod 3$。

结论 5:若有 $r \equiv l+2 \pmod 3$(即 $r = l+2+3k, k \in \mathbb{Z}$),则特殊段的逆时针方向连接 B 类段;反之,则顺时针连接 B 类段。

注意:A 类段与 B 类段的另一个分界点即为终点。

总结上述讨论,得到分段方案必须满足的五个必要条件:

  1. 长度大于 $1$ 的段必须彼此相连,且必须与起点相连。
  2. 非特殊段的段长不是 $3$ 的倍数,长度表现为 $3k+1$ 的为 A 类段,表现为 $3k+2$ 的为 B 类段。
  3. 把特殊段(或从起点)断开成链后,A 类和 B 类段分别构成连续段,分界点为终点。
  4. 特殊段从起点顺逆时针延伸长度 $l,r$ 满足 $l \not\equiv r \pmod 3$。
  5. 特殊段相邻的段类型由 $r$ 与 $l$ 在模 $3$ 意义下的相对大小唯一定决。

下面通过构造证明其实际上也是充分的:

总能构造出一种移动方案,使得指针始终不经过 A 类段的某个内部边界点(具体而言,是长度为 $1$ 的段的某个端点),从而将环上问题转化为序列上的问题。 构造思路如下:指针先一直向 A 类段移动,遇到第一个非普通 A 类段(例如首个长度为 $1$ 的段或 B 类段边界)即折返。在返回途中,通过反复移动将这一路上的每一小段长度合并调整为 $1$。随后处理特殊段的长度,最后再向 B 类段移动。在前往 B 类段的途中将途经段的长度依次合并调整为 $1$,并在最后处理与 B 类段相连的 A 类段长度调整。该构造过程确保了始终有一个分界点未被穿过,证明了所有符合前述条件的划分均存在相对应的合法操作序列。

基于上述性质,问题转化为如何在环上划分满足条件的段。

枚举终点的位置,再枚举终点的哪一侧属于 A 类段:

  1. 向 B 类段侧匹配:在抵达特殊段(或越过终点全环)之前,每次在目标端点之后寻找并贪心选择一段合法且尽可能短的区间(即最早满足条件的断点)进行匹配。
  2. 向 A 类段侧匹配:只有 A 类段长度可能为 $1$。优先策略依旧是以短为优,但在遇到可以选择长度为 $1$ 的段时,决策会出现分支:
    • 决策一:选择长度为 $1$ 的段。这要求后续这一类型的段必须连续排列。在这一段连续取 $1$ 的片段结束后,再恢复原贪心策略。
    • 决策二:选择大于 $1$ 的最短合法段。这意味着不进入连续取 $1$ 的状态,继续沿用原有的基本贪心策略。

接下来证明贪心的正确性:

假设存在某个正确划分方案 $P$,使得利用区间 $[P_{i-1}+1, P_i]$ 能够构造出目标序列的元素 $B_i$。而在执行贪心策略时取得了前缀划分 $P'$ 来构造 $B_1 \sim B_k$。由于单步匹配总是尽可能缩短当前段长,必定有 $P'_k \le P_k$。因此,总能利用区间 $[P'_k+1, P_{k+1}]$ 去继续构造 $B_{k+1}$,这一操作可视为端点的“提升”。后续区间的可用长度进而变长。除在要求段长必须为 $1$ 的连续片段区域外,其余段长变长通常具有更优的包容性,且能找到合适的合法状态,不会破坏其条件。因此该贪心策略是安全的。

如此基础转移总时间复杂度为 $O(n^3)$。

进一步地,根据是否处于连续选取长度为 $1$ 的段,匹配过程可划分为三个状态阶段:

  1. 尚未选择过长度为 $1$ 的段;
  2. 正在连续选择长度为 $1$ 的段;
  3. 结束连续选择状态,继续后续常规匹配。

对于阶段 1 和阶段 3,假设对于统一处理进度 $B[1\dots k]$ 的两个前缀划分 $P$ 和 $P'$,依据“提升”性质,总占用长度越短的状态距离原点越近始终更优。因此只用保留距离最短的最优匹配即可。对于阶段 2 中的长为 $1$ 的连续段转移,由于其具有固定排布的性质,可利用二分查找配合字符串哈希(Hash)来快速跳过并匹配连续的 $1$ 块。这一优化可将总时间复杂度降至 $O(n^2 \log n)$。但在本题的数据范围内,$O(n^3)$ 复杂度已经能够充裕地通过,无需强制实现该优化。

Comments

No comments yet.