CF2085A.Serval and String Theory
入门
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
仅由小写拉丁字母组成的字符串 r 被称为通用字符串,当且仅当 r 在字典序上小于∗其反转†后的字符串。
给定一个由 n 个小写拉丁字母组成的字符串 s。你需要通过最多 k 次操作使 s 成为通用字符串。每次操作可执行以下步骤:
- 选择两个下标 i 和 j(1≤i,j≤n),交换 si 和 sj。注意若 i=j,则不进行任何操作。
请判断是否能在最多 k 次操作内使 s 成为通用字符串。
∗当两个长度相同的字符串 a 和 b 满足以下条件时,称 a 的字典序小于 b:
- 在第一个不同的位置上,a 的字符在字母表中出现的时间早于 b 对应位置的字符。
†字符串 r 的反转是指将 r 从右向左书写得到的新字符串。例如,字符串 abcad 的反转为 dacba。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数 t(1≤t≤500)。接下来描述每个测试用例。
每个测试用例的第一行包含两个整数 n 和 k(1≤n≤100,0≤k≤104)——字符串 s 的长度及允许的最大操作次数。
第二行输入一个由 n 个小写拉丁字母组成的字符串 s。
输出格式
对于每个测试用例,若能在最多 k 次操作内使 s 成为通用字符串,输出 "YES",否则输出 "NO"。
答案可以任意大小写形式输出(例如 "yEs"、"yes"、"Yes" 和 "YES" 均视为肯定回答)。
输入输出样例
输入#1
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
输出#1
NO YES NO YES YES NO YES NO
说明/提示
第一个测试案例中,任何操作后 s 均保持不变。但 a 的反转仍为 a,因此无法使其成为通用字符串。
第二个测试案例中,字符串 rev 的字典序小于其反转 ver,因此 s 已经是通用字符串。
第五个测试案例中,可按以下步骤操作:
- 交换 s4 和 s7,此时 s 变为 uniserval;
- 交换 s1 和 s3,此时 s 变为 inuserval。
字符串 inuserval 是通用字符串。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?