P13547 [OOI 2022] Third grader's task
题目描述
小男孩 Tyler 在厨房的冰箱上看到了一些带有符号的磁铁,这些磁铁可以拼成一个字符串 $s$。
Tyler 很喜欢字符串,尤其喜欢那些字典序小于字符串 $t$ 的字符串。玩着冰箱上的磁铁,他开始好奇:用 $s$ 的字母重新排列,可以组成多少个不同的字符串,使得这些字符串的字典序小于 $t$?Tyler 还只读三年级,他无法回答这个问题。请你帮他计算,用 $s$ 的字母重新排列,字典序小于 $t$ 的排列有多少种。
我们称字符串 $x$ 的字典序小于字符串 $y$,当且仅当满足以下两种情况之一:
- 存在某个位置 $m$,在此之前两个字符串完全相同,而第 $m$ 位 $s$ 的字符小于第 $m$ 位 $y$ 的字符;
- 字符串 $x$ 是字符串 $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]$ 这一种。
### 评分说明
本题测试数据分为 6 组。只有通过某组所有测试点,且通过所有必需的前置组,才能获得该组分数。**离线评测**表示该组的结果在比赛结束后才能看到。注意,有些分组不要求通过样例测试点。
| 组别 | 分值 | $n, m$ | $s_i, t_i$ | 必须通过的组 | 备注 |
|:----:|:----:|:------:|:----------:|:------------:|:----:|
| 0 | 0 | -- | -- | -- | -- | 样例测试点 |
| 1 | 16 | $n, m \le 10$ | $s_i, t_i \le 10$ | 0 | |
| 2 | 15 | -- | $s_i, t_i \le 2$ | -- | |
| 3 | 11 | -- | $s_i, t_i \le 20$ | 0--2 | |
| 4 | 13 | -- | $s_i, t_i \le 200$ | 0--3 | |
| 5 | 12 | -- | -- | -- | 每个字符串内部所有字符均不同 |
| 6 | 33 | -- | -- | 0--5 | **离线评测** |