CF1455F.String and Operations

省选/NOI-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

You are given a string ss consisting of nn characters. These characters are among the first kk lowercase letters of the Latin alphabet. You have to perform nn operations with the string.

During the ii-th operation, you take the character that initially occupied the ii-th position, and perform one of the following actions with it:

  • swap it with the previous character in the string (if it exists). This operation is represented as L;
  • swap it with the next character in the string (if it exists). This operation is represented as R;
  • cyclically change it to the previous character in the alphabet (b becomes a, c becomes b, and so on; a becomes the kk-th letter of the Latin alphabet). This operation is represented as D;
  • cyclically change it to the next character in the alphabet (a becomes b, b becomes c, and so on; the kk-th letter of the Latin alphabet becomes a). This operation is represented as U;
  • do nothing. This operation is represented as 0.

For example, suppose the initial string is test, k=20k = 20, and the sequence of operations is URLD. Then the string is transformed as follows:

  1. the first operation is U, so we change the underlined letter in test to the next one in the first 2020 Latin letters, which is a. The string is now aest;
  2. the second operation is R, so we swap the underlined letter with the next one in the string aest. The string is now aset;
  3. the third operation is L, so we swap the underlined letter with the previous one in the string aset (note that this is now the 22-nd character of the string, but it was initially the 33-rd one, so the 33-rd operation is performed to it). The resulting string is saet;
  4. the fourth operation is D, so we change the underlined letter in saet to the previous one in the first 2020 Latin letters, which is s. The string is now saes.

The result of performing the sequence of operations is saes.

Given the string ss and the value of kk, find the lexicographically smallest string that can be obtained after applying a sequence of operations to ss.

给你一个由 nn 个字符组成的字符串 ss。这些字符均属于拉丁字母表前 kk 个小写字母。你需要对这个字符串执行 nn 次操作。

在第 ii 次操作中,你选取最初位于第 ii 个位置的字符,并对其执行以下操作之一:

  • 将其与字符串中前一个字符交换(若存在)。该操作记为 L;
  • 将其与字符串中后一个字符交换(若存在)。该操作记为 R;
  • 在字母表中将其循环地变为前一个字符(即 b 变为 a,c 变为 b,依此类推;a 变为拉丁字母表中第 kk 个字母)。该操作记为 D;
  • 在字母表中将其循环地变为后一个字符(即 a 变为 b,b 变为 c,依此类推;拉丁字母表中第 kk 个字母变为 a)。该操作记为 U;
  • 不进行任何操作。该操作记为 0。

例如,假设初始字符串为 test,k=20k = 20,操作序列为 URLD,则字符串按如下方式变换:

  1. 第一次操作为 U,因此我们将 test 中带下划线的字母(即第一个字符 t)变为前 2020 个拉丁字母中的下一个字母,即 a。字符串变为 aest;
  2. 第二次操作为 R,因此我们将 aest 中带下划线的字母(即第二个字符 e)与它后面的字符交换。字符串变为 aset;
  3. 第三次操作为 L,因此我们将 aset 中带下划线的字母(即第三个字符 s;注意:此时它是字符串中第 22 个字符,但它最初是第 33 个字符,因此第 33 次操作作用于它)与它前面的字符交换。结果字符串为 saet;
  4. 第四次操作为 D,因此我们将 saet 中带下划线的字母(即第四个字符 t)变为前 2020 个拉丁字母中的前一个字母,即 s。字符串变为 saes。

执行该操作序列后的结果为 saes。

给定字符串 ss 和参数 kk,求对 ss 执行某一操作序列后所能得到的字典序最小的字符串。

输入格式

The first line contains one integer tt (1≤t≤10001 \le t \le 1000) — the number of test cases.

Each test case consists of two lines. The first line contains two integers nn and kk (1≤n≤5001 \le n \le 500; 2≤k≤262 \le k \le 26).

The second line contains a string ss consisting of nn characters. Each character is one of the kk first letters of the Latin alphabet (in lower case).

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000)—— 测试用例的数量。

每个测试用例由两行组成。第一行包含两个整数 nn 和 kk(1≤n≤5001 \le n \le 500;2≤k≤262 \le k \le 26)。

第二行包含一个长度为 nn 的字符串 ss。字符串中的每个字符均为拉丁字母表前 kk 个小写字母之一。

输出格式

For each test case, print one line containing the lexicographically smallest string that can be obtained from ss using one sequence of operations.

对于每个测试用例,输出一行,包含通过一次操作序列能从 ss 得到的字典序最小的字符串。

输入输出样例

  • 输入#1

    6
    4 2
    bbab
    7 5
    cceddda
    6 5
    ecdaed
    7 4
    dcdbdaa
    8 3
    ccabbaca
    5 7
    eabba

    输出#1

    aaaa
    baccacd
    aabdac
    aabacad
    aaaaaaaa
    abadb

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

首页