atcoder#ARC148B. [ARC148B] dp

[ARC148B] dp

题目描述

dp からなる長さ L L の文字列 T T に対して、T T 180 180 度回転した文字列を f(T) f(T) と表します。より厳密には、f(T) f(T) を次の条件を満たす文字列として定めます。

  • f(T) f(T) dp からなる長さ L L の文字列である。
  • 1  i  L 1\ \leq\ i\ \leq\ L であるすべての整数 i i について、f(T) f(T) i i 文字目は T T L + 1  i L\ +\ 1\ -\ i 文字目と異なる。

例えば T = T\ = ddddd のとき f(T) = f(T)\ = ppppp, T = T\ = dpdppp のとき f(T)= f(T)= dddpdp です。

dp からなる長さ N N の文字列 S S が与えられます。
あなたは次の操作を 0 0 回以上 1 1 回以下行うことができます。

  • 1  L  R  N 1\ \leq\ L\ \leq\ R\ \leq\ N である整数の組 (L, R) (L,\ R) 1 1 つ選び、S S L L 文字目から R R 文字目までからなる部分文字列を T T とする。そして、S S L L 文字目から R R 文字目までを f(T) f(T) に置き換える。

例えば S= S= dpdpp, (L,R)=(2,4) (L,R)=(2,4) の場合、T= T= pdp, f(T)= f(T)= dpd なので S S ddpdp に変化します。

最終的な S S としてあり得る文字列のうち辞書順最小のものを出力してください。

辞書順とは?文字列 S = S1S2 SS S\ =\ S_1S_2\ldots\ S_{|S|} が文字列 T = T1T2 TT T\ =\ T_1T_2\ldots\ T_{|T|} より辞書順で小さいとは、下記の 1. と 2. のどちらかが成り立つことを言います。 ここで、S, T |S|,\ |T| はそれぞれ S, T S,\ T の長さを表します。

  1. S < T |S|\ \lt\ |T| かつ S1S2 SS = T1T2 TS S_1S_2\ldots\ S_{|S|}\ =\ T_1T_2\ldots\ T_{|S|}
  2. ある整数 $ 1\ \leq\ i\ \leq\ \min\lbrace\ |S|,\ |T|\ \rbrace $ が存在して、下記の 2 2 つがともに成り立つ。
  • S1S2 Si1 = T1T2 Ti1 S_1S_2\ldots\ S_{i-1}\ =\ T_1T_2\ldots\ T_{i-1}
  • Si S_i Ti T_i よりアルファベット順で小さい文字である。

输入格式

入力は以下の形式で標準入力から与えられる。

N N S S

输出格式

答えを出力せよ。

题目大意

给出一个长度为 N(1N5000)N (1 \le N \le 5000) 的字符串 SS,且 Si,Si{d,p}\forall S_i , S_i \in \{d,p \}

定义 rotate(l,r)rotate (l,r),对于区间 [l,r][l,r] 的每一个 ii,重新赋值 SiS_i,使得 SiSr+liS_i \not= S_{r+l-i} (即对称)。

需要执行 0011rotate(l,r)rotate (l,r)l,rl,r 是任意的),使得 SS 字典序最小。

6
dpdppd
dddpdd
3
ddd
ddd
11
ddpdpdppddp
ddddpdpdddp

提示

制約

  • 1  N  5000 1\ \leq\ N\ \leq\ 5000
  • S S dp からなる長さ N N の文字列
  • N N は整数

Sample Explanation 1

(L, R) = (2, 5) (L,\ R)\ =\ (2,\ 5) とします。T = T\ = pdpp, f(T) = f(T)\ = ddpd なので、操作後の S S dddpdd になります。 得られる文字列のうち dddpdd が辞書順最小なので、これを出力します。

Sample Explanation 2

操作を行わないことが最適な場合もあります。