Gravatar
LikableP
积分:1660
提交:388 / 1046

Pro4275  [THUPC 2025 pre] 倒装句

给定三种记号:

  • $s_i\text{#}s_{i+1}$ 表示读完 $s_i$ 后应紧跟 $s_{i+1}$,且优先级高于其它两种符号;
  • $s_i\text{*}s_{i+1}$ 表示读完 $s_{i+1}$ 后再读 $s_i$;
  • $s_i\text{p-q}$ 表示(在不考虑的情况下)(如果有则)先读对应的 $\text{p-(q-1)}$ 前的文字,读完 $s_i$,再读对应的 $\text{p-(q+1)}$ 前的文字。

给出一个排列 $p_i$,求一组记号使得阅读 $p_i$ 的顺序恰好将其还原为 $1 \sim K$ 的排列。

1 \le K \le 10^6


先考虑只有最复杂的 \text{p-q} 时应该怎么处理。

可以想到用栈来保存当前的遥远跳转结构,如果碰到可以直接阅读的则将栈清空。

如果有多个遥远跳转结构怎么办?栈套栈!每弹出一个栈,更新新栈顶的栈的嵌套层数。

在此基础上可以实现另外两种符号,其中 \text{*}(及其连续段)需要根据头尾情况简单分类讨论一下。想清楚了实现起来并不复杂。

复杂度 $O(K)$


2026-01-24 20:07:15    
我有话要说
暂无人分享评论!