CF1648C Tyler and Strings
题目描述
小男孩 Tyler 在厨房的冰箱上看到了一些带有符号的磁铁,这些磁铁可以排列成一个字符串 $s$。
Tyler 喜欢字符串,尤其是那些字典序小于另一个字符串 $t$ 的字符串。在冰箱上玩磁铁时,他想知道,可以用字符串 $s$ 的字母重新排列出多少个不同的字符串,使得结果字符串的字典序小于字符串 $t$?Tyler 年纪太小,无法回答这个问题。Tyler 使用的字母表非常大,为了方便起见,他已经将 $s$ 和 $t$ 中相同的字母替换成了相同的整数,并保证不同的字母被替换成了不同的整数。
我们称字符串 $x$ 的字典序小于字符串 $y$,当且仅当满足以下条件之一:
- 存在一个位置 $m$,该位置在两个字符串中都存在,并且在第 $m$ 个字符之前两个字符串都相同,第 $m$ 个字符 $x$ 的值小于 $y$ 的值。
- 字符串 $x$ 是字符串 $y$ 的前缀,且 $x \neq y$。
由于答案可能非常大,请输出答案对 $998\,244\,353$ 取模后的结果。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 200\,000$)——字符串 $s$ 和 $t$ 的长度。
第二行包含 $n$ 个整数 $s_1, s_2, s_3, \ldots, s_n$($1 \le s_i \le 200\,000$)——字符串 $s$ 的字母。
第三行包含 $m$ 个整数 $t_1, t_2, t_3, \ldots, t_m$($1 \le t_i \le 200\,000$)——字符串 $t$ 的字母。
输出格式
输出一个整数,表示可以通过重新排列 $s$ 的字母得到的、字典序小于 $t$ 的字符串个数,对 $998\,244\,353$ 取模。
说明/提示
在第一个样例中,满足条件的字符串为 $[1\, 2\, 2]$ 和 $[2\, 1\, 2]$。字符串 $[2\, 2\, 1]$ 的字典序大于 $[2\, 1\, 2\, 1]$,因此不计入答案。
在第二个样例中,除了 $[4\, 3\, 2\, 1]$ 以外的所有字符串都满足条件,因此答案为 $4! - 1 = 23$。
在第三个样例中,只有字符串 $[1\, 1\, 1\, 2]$ 满足条件。
由 ChatGPT 4.1 翻译