CF1451C String Equality

题目描述

Ashish 有两个字符串 $a$ 和 $b$,每个长度为 $n$,以及一个整数 $k$。这两个字符串只包含小写英文字母。 他想通过对字符串 $a$ 进行若干(可能为零)次操作,将其变为字符串 $b$。 每次操作,他可以选择以下两种之一: - 选择一个下标 $i$($1 \leq i \leq n-1$),交换 $a_i$ 和 $a_{i+1}$; - 选择一个下标 $i$($1 \leq i \leq n-k+1$),如果 $a_i, a_{i+1}, \ldots, a_{i+k-1}$ 都等于某个字符 $c$($c \neq$ 'z'),则将这 $k$ 个字符都替换为下一个字符(即 $c+1$),例如 'a' 替换为 'b','b' 替换为 'c',以此类推。 注意,他可以进行任意次数的操作,且操作只能作用于字符串 $a$。 请你帮助 Ashish 判断,是否可以通过若干次操作将字符串 $a$ 变为 $b$。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例的数量。每个测试用例的描述如下: 每个测试用例的第一行包含两个整数 $n$($2 \leq n \leq 10^6$)和 $k$($1 \leq k \leq n$)。 第二行包含长度为 $n$ 的字符串 $a$,仅由小写英文字母组成。 第三行包含长度为 $n$ 的字符串 $b$,仅由小写英文字母组成。 保证所有测试用例中 $n$ 的总和不超过 $10^6$。

输出格式

对于每个测试用例,如果 Ashish 可以通过若干次操作将 $a$ 变为 $b$,输出 "Yes";否则输出 "No"。 你可以以任意大小写输出答案。

说明/提示

在第一个测试用例中,可以证明无法将 $a$ 变为 $b$。 在第二个测试用例中, "abba" $ \xrightarrow{\text{inc}} $ "acca" $ \xrightarrow{\text{inc}} $ $ \ldots $ $ \xrightarrow{\text{inc}} $ "azza"。 其中 "swap" 表示第一种操作,"inc" 表示第二种操作。 在第四个测试用例中, "aaabba" $ \xrightarrow{\text{swap}} $ "aaabab" $ \xrightarrow{\text{swap}} $ "aaaabb" $ \xrightarrow{\text{inc}} $ $ \ldots $ $ \xrightarrow{\text{inc}} $ "ddaabb" $ \xrightarrow{\text{inc}} $ $ \ldots $ $ \xrightarrow{\text{inc}} $ "ddddbb" $ \xrightarrow{\text{inc}} $ $ \ldots $ $ \xrightarrow{\text{inc}} $ "ddddcc"。 由 ChatGPT 4.1 翻译