CF2085A Serval and String Theory

题目描述

仅由小写拉丁字母组成的字符串 $r$ 被称为**通用字符串**,当且仅当 $r$ 在字典序上小于$^{\text{∗}}$其反转$^{\text{†}}$后的字符串。 给定一个由 $n$ 个小写拉丁字母组成的字符串 $s$。你需要通过最多 $k$ 次操作使 $s$ 成为通用字符串。每次操作可执行以下步骤: - 选择两个下标 $i$ 和 $j$($1 \le i, j \le n$),交换 $s_i$ 和 $s_j$。注意若 $i = j$,则不进行任何操作。 请判断是否能在最多 $k$ 次操作内使 $s$ 成为通用字符串。 $^{\text{∗}}$当两个长度相同的字符串 $a$ 和 $b$ 满足以下条件时,称 $a$ 的字典序小于 $b$: - 在第一个不同的位置上,$a$ 的字符在字母表中出现的时间早于 $b$ 对应位置的字符。 $^{\text{†}}$字符串 $r$ 的反转是指将 $r$ 从右向左书写得到的新字符串。例如,字符串 $\texttt{abcad}$ 的反转为 $\texttt{dacba}$。

输入格式

每个测试包含多个测试用例。第一行输入测试用例数 $t$($1 \le t \le 500$)。接下来描述每个测试用例。 每个测试用例的第一行包含两个整数 $n$ 和 $k$($1 \le n \le 100$,$0 \le k \le 10^4$)——字符串 $s$ 的长度及允许的最大操作次数。 第二行输入一个由 $n$ 个小写拉丁字母组成的字符串 $s$。

输出格式

对于每个测试用例,若能在最多 $k$ 次操作内使 $s$ 成为通用字符串,输出 "YES",否则输出 "NO"。 答案可以任意大小写形式输出(例如 "yEs"、"yes"、"Yes" 和 "YES" 均视为肯定回答)。

说明/提示

第一个测试案例中,任何操作后 $s$ 均保持不变。但 $\texttt{a}$ 的反转仍为 $\texttt{a}$,因此无法使其成为通用字符串。 第二个测试案例中,字符串 $\texttt{rev}$ 的字典序小于其反转 $\texttt{ver}$,因此 $s$ 已经是通用字符串。 第五个测试案例中,可按以下步骤操作: 1. 交换 $s_4$ 和 $s_7$,此时 $s$ 变为 $\texttt{uniserval}$; 2. 交换 $s_1$ 和 $s_3$,此时 $s$ 变为 $\texttt{inuserval}$。 字符串 $\texttt{inuserval}$ 是通用字符串。 翻译由 DeepSeek R1 完成