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 完成