题解:P17273 [eJOI 2026] Automata

· · 题解

场了记录一下。放 NOIP T2 还是有点太高看我了,做了一百万年。

一个观察就是 K>2 和 K=2 没有区别,只要你最左和最右的两个点能靠起来就够了,中间的不用管。接下来只考虑两个点的情况。

观察走的过程,我们将这些结构定义为“单向阀”:

特别地,假装序列的边界也存在单向阀。

那么我们考虑要让 l,r 走到一起要满足什么条件。若两个点之间没有任何单向阀,或者单向阀全部同向,那么只要让一边不断靠过去即可,必然有解。否则,单向阀一定形如 \cdots\to\to\to\gets\gets\gets\cdots,能靠到最中间就赢了。继续分类讨论:

以上就是所有情况,实现只需要找上一个或下一个 \to 或 \gets,直接二分做到 \mathcal{O}(n\log n),预处理所有位置的前驱后继即可做到 \mathcal{O}(n)。