AT_arc134_b.[ARC134B] Reserve or Reverse

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 NN 的字符串 ss。第 ii 个字符记作 sis_i。

すぬけ君会按照以下步骤对 ss 进行变换:

  • 选择 (1,2,…,N)(1,2,\ldots,N) 的一个长度为偶数的(不一定连续)子序列 x=(x1,x2,…,x2k)x=(x_1, x_2, \ldots, x_{2k})(k=0k=0 也可以)。
  • 将 sx1s_{x_1} 与 sx2ks_{x_{2k}} 交换。
  • 将 sx2s_{x_2} 与 sx2k−1s_{x_{2k-1}} 交换。
  • 将 sx3s_{x_3} 与 sx2k−2s_{x_{2k-2}} 交换。
  • ⋮\vdots
  • 将 sxks_{x_k} 与 sxk+1s_{x_{k+1}} 交换。

请你求出,经过すぬけ君操作后,ss 可能变成的所有字符串中,字典序最小的字符串。

什么是字典序?字典序简单来说就是“单词在字典中的排列顺序”。更严格地说,判断两个不同字符串 SS 和 TT 的大小的方法如下:

记“SS 的第 ii 个字符”为 SiS_i。若 SS 字典序小于 TT,记作 S<TS < T;若大于,记作 S>TS > T。

  1. 取 SS 和 TT 中较短的长度为 LL。依次比较 i=1,2,…,Li=1,2,\dots,L 的 SiS_i 和 TiT_i 是否相同。
  2. 若存在 Si≠TiS_i \neq T_i,取最小的此类 ii 为 jj,比较 SjS_j 和 TjT_j。若 SjS_j 的字母序小于 TjT_j,则 S<TS < T,否则 S>TS > T,算法结束。
  3. 若所有 Si=TiS_i = T_i,则比较长度,若 SS 比 TT 短,则 S<TS < T,否则 S>TS > T,算法结束。

输入格式

输入从标准输入读入,格式如下:

NN ss

输出格式

请输出すぬけ君操作后可能得到的所有字符串中字典序最小的一个。

输入输出样例

  • 输入#1

    4
    dcab

    输出#1

    acdb
  • 输入#2

    2
    ab

    输出#2

    ab
  • 输入#3

    16
    cabaaabbbabcbaba

    输出#3

    aaaaaaabbbbcbbbc
  • 输入#4

    17
    snwfpfwipeusiwkzo

    输出#4

    effwpnwipsusiwkzo

说明/提示

数据范围

  • 1≤N≤2×1051 \leq N \leq 2 \times 10^5
  • ss 是仅由小写英文字母组成的长度为 NN 的字符串

样例解释 1

  • 当 x=(1,3)x=(1,3) 时,仅 s1s_1 和 s3s_3 被交换。操作后 ss 变为 acdb,是字典序最小的。

样例解释 2

  • 当 x=()x=() 时,操作后 ss 仍为 ab,是字典序最小的。注意 xx 的长度为 00 也是允许的。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页