AT_arc148_b [ARC148B] dp

题目描述

对于仅由 `d` 和 `p` 组成、长度为 $L$ 的字符串 $T$,定义 $T$ 经过 $180$ 度旋转后的字符串为 $f(T)$。更严格地说,$f(T)$ 满足以下条件: - $f(T)$ 是仅由 `d` 和 `p` 组成、长度为 $L$ 的字符串。 - 对于所有满足 $1 \leq i \leq L$ 的整数 $i$,$f(T)$ 的第 $i$ 个字符与 $T$ 的第 $L+1-i$ 个字符不同。 例如,当 $T = $ `ddddd` 时,$f(T) = $ `ppppp`;当 $T = $ `dpdppp` 时,$f(T) = $ `dddpdp`。 给定一个仅由 `d` 和 `p` 组成、长度为 $N$ 的字符串 $S$。 你可以进行 **$0$ 次或 $1$ 次**如下操作: - 选择一组整数 $(L, R)$,满足 $1 \leq L \leq R \leq N$,取 $S$ 的第 $L$ 个字符到第 $R$ 个字符组成的子串 $T$。然后,将 $S$ 的第 $L$ 个字符到第 $R$ 个字符替换为 $f(T)$。 例如,$S = $ `dpdpp`,$(L, R) = (2, 4)$ 时,$T = $ `pdp`,$f(T) = $ `dpd`,所以操作后 $S$ 变为 `ddpdp`。 请输出所有可能得到的 $S$ 中,字典序最小的字符串。 字典序的定义如下:对于字符串 $S = S_1S_2\ldots S_{|S|}$ 和 $T = T_1T_2\ldots T_{|T|}$,$S$ 字典序小于 $T$,当且仅当满足以下两条之一。这里 $|S|, |T|$ 分别表示 $S, T$ 的长度。 1. $|S| < |T|$ 且 $S_1S_2\ldots S_{|S|} = T_1T_2\ldots T_{|S|}$。 2. 存在整数 $1 \leq i \leq \min\lbrace |S|, |T| \rbrace$,使得以下两点都成立: - $S_1S_2\ldots S_{i-1} = T_1T_2\ldots T_{i-1}$ - $S_i$ 是按字母顺序小于 $T_i$ 的字符。

输入格式

输入按以下格式从标准输入读入。 > $N$ $S$

输出格式

请输出答案。

说明/提示

## 限制条件 - $1 \leq N \leq 5000$ - $S$ 是仅由 `d` 和 `p` 组成、长度为 $N$ 的字符串 - $N$ 是整数 ## 样例解释 1 选择 $(L, R) = (2, 5)$。$T = $ `pdpp`,$f(T) = $ `ddpd`,所以操作后的 $S$ 为 `dddpdd`。在所有可能得到的字符串中,`dddpdd` 字典序最小,因此输出它。 ## 样例解释 2 有时不进行操作是最优的。 由 ChatGPT 4.1 翻译