CF2085A.Serval and String Theory

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Serval and String Theory

题目描述

仅由小写拉丁字母组成的字符串 rr 被称为通用字符串,当且仅当 rr 在字典序上小于^{\text{∗}}其反转^{\text{†}}后的字符串。

给定一个由 nn 个小写拉丁字母组成的字符串 ss。你需要通过最多 kk 次操作使 ss 成为通用字符串。每次操作可执行以下步骤:

  • 选择两个下标 iijj1i,jn1 \le i, j \le n),交换 sis_isjs_j。注意若 i=ji = j,则不进行任何操作。

请判断是否能在最多 kk 次操作内使 ss 成为通用字符串。

^{\text{∗}}当两个长度相同的字符串 aabb 满足以下条件时,称 aa 的字典序小于 bb

  • 在第一个不同的位置上,aa 的字符在字母表中出现的时间早于 bb 对应位置的字符。

^{\text{†}}字符串 rr 的反转是指将 rr 从右向左书写得到的新字符串。例如,字符串 abcad\texttt{abcad} 的反转为 dacba\texttt{dacba}

输入格式

每个测试包含多个测试用例。第一行输入测试用例数 tt1t5001 \le t \le 500)。接下来描述每个测试用例。

每个测试用例的第一行包含两个整数 nnkk1n1001 \le n \le 1000k1040 \le k \le 10^4)——字符串 ss 的长度及允许的最大操作次数。

第二行输入一个由 nn 个小写拉丁字母组成的字符串 ss

输出格式

对于每个测试用例,若能在最多 kk 次操作内使 ss 成为通用字符串,输出 "YES",否则输出 "NO"。

答案可以任意大小写形式输出(例如 "yEs"、"yes"、"Yes" 和 "YES" 均视为肯定回答)。

说明/提示

第一个测试案例中,任何操作后 ss 均保持不变。但 a\texttt{a} 的反转仍为 a\texttt{a},因此无法使其成为通用字符串。

第二个测试案例中,字符串 rev\texttt{rev} 的字典序小于其反转 ver\texttt{ver},因此 ss 已经是通用字符串。

第五个测试案例中,可按以下步骤操作:

  1. 交换 s4s_4s7s_7,此时 ss 变为 uniserval\texttt{uniserval}
  2. 交换 s1s_1s3s_3,此时 ss 变为 inuserval\texttt{inuserval}

字符串 inuserval\texttt{inuserval} 是通用字符串。

翻译由 DeepSeek R1 完成

样例

8
1 10000
a
3 3
rev
6 0
string
6 0
theory
9 2
universal
19 0
codeforcesecrofedoc
19 1
codeforcesecrofedoc
3 1
zzz
NO
YES
NO
YES
YES
NO
YES
NO

在线编程 IDE

建议全屏模式获得最佳体验