AT_agc019_e [AGC019E] Shuffle and Swap
题目描述
有两个长度相同、仅由 $0$ 和 $1$ 组成的字符串 $A = A_1A_2\ldots A_n$ 和 $B = B_1B_2\ldots B_n$。$A$ 和 $B$ 中 $1$ 的个数是相等的。
你决定通过如下的算法改变 $A$:
- 令 $a_1, a_2, \ldots, a_k$ 为 $A$ 中所有 $1$ 出现的位置的下标。
- 令 $b_1, b_2, \ldots, b_k$ 为 $B$ 中所有 $1$ 出现的位置的下标。
- 将 $a$ 和 $b$ 的元素分别独立地均匀随机排列。
- 然后对于每个 $i$($1 \leq i \leq k$),依次交换 $A_{a_i}$ 和 $A_{b_i}$ 的值。
完成上述步骤后,设 $A$ 和 $B$ 完全相等的概率为 $P$。
进一步定义 $Z = P \times (k!)^2$。显然,$Z$ 是整数。
请输出 $Z$ 对 $998244353$ 取余的结果。
输入格式
输入为一行,包括两个字符串 $A$ 和 $B$。
输出格式
输出 $Z$ 对 $998244353$ 取余的结果。
说明/提示
### 限制
- $1 \leq |A| = |B| \leq 10\,000$
- $A$ 和 $B$ 仅包含 $0$ 和 $1$
- $A$ 和 $B$ 中的 $1$ 的数量相等,且至少有一个 $1$
### 部分分
- 若能通过 $1 \leq |A| = |B| \leq 500$ 数据集,将获得 $1200$ 分。
### 样例解释 1
最初的两步后,$a = [1, 3]$,$b = [1, 2]$。将 $a$ 和 $b$ 随机排列后,可能的四种组合如下:
- $a = [1, 3], b = [1, 2]$。初始 $A = 1010$。交换 $A_1$ 和 $A_1$ 后 $A = 1010$。交换 $A_3$ 和 $A_2$ 后 $A = 1100$。
- $a = [1, 3], b = [2, 1]$。初始 $A = 1010$。交换 $A_1$ 和 $A_2$ 后 $A = 0110$。交换 $A_3$ 和 $A_1$ 后 $A = 1100$。
- $a = [3, 1], b = [1, 2]$。初始 $A = 1010$。交换 $A_3$ 和 $A_1$ 后 $A = 1010$。交换 $A_1$ 和 $A_2$ 后 $A = 0110$。
- $a = [3, 1], b = [2, 1]$。初始 $A = 1010$。交换 $A_3$ 和 $A_2$ 后 $A = 1100$。交换 $A_1$ 和 $A_1$ 后 $A = 1100$。
在上述四种结果中,有三种 $A = B$,因此 $P = 3/4$,$Z = 3$。
### 样例解释 2
通过 $A$ 的元素交换,$A$ 始终不会改变,所以总有 $A = B$。
### 样例解释 3
无论三次 $A$ 的元素交换如何发生,$A$ 中的 $1$ 总会正确到达目标位置。
由 ChatGPT 5 翻译