题目描述
0 と 1 からなる同じ長さの二つの文字列 A = A1 A2 ... An と B = B1 B2 ... Bn があります。 A, B に含まれる 1 の個数は等しいです。
あなたは次のアルゴリズムによって A を変化させることにしました。
- a1, a2, ..., ak を、A で 1 が出現する位置の添字とする。
- b1, b2, ..., bk を、B で 1 が出現する位置の添字とする。
- a, b の要素をそれぞれ無作為に並び替える。これらの無作為な並び替えは一様かつ独立である。
- 1 から k までの各 i に対して、順に Aai と Abi の値を入れ替える。
この手順のあと、文字列 A, B が一致する確率を P とします。
さらに、Z = P × (k!)2 とします。明らかに、Z は整数です。
Z を 998244353 で割った余りを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
A B
输出格式
Z を 998244353 で割った余りを出力せよ。
题目大意
给出两个长度为 n(n≤104) 的 01 串 A 和 B。两个串均恰有 k 个 1。令 a1,2,⋯,k 和 b1,2,⋯,k 分别表示 A 和 B 中所有 1 出现的位置。
将 a 和 b 等概率随机排列,按 i=1,2,⋯,k 的顺序交换 Aai 和 Abi。令 P 表示操作完成后 A 与 B 相等的概率,求 P×(k!)2 在模 998244353 意义下的值。
感谢@skylee 提供翻译
1010
1100
3
01001
01001
4
101010
010101
36
1101011011110
0111101011101
932171449
提示
制約
- 1 ≤ ∣A∣ = ∣B∣ ≤ 10,000
- A, B は 0 と 1 からなる。
- A, B に含まれる 1 の個数は等しい。
- A, B には 1 が少なくとも一つ含まれる。
部分点
- 1 ≤ ∣A∣ = ∣B∣ ≤ 500 を満たすデータセットに正解すると、1200 点が与えられる。
Sample Explanation 1
最初の二つのステップで、a = [1, 3], b = [1, 2] となります。a, b の要素を無作為に並び替えたあとの結果としてありうるものは次の 4 つです。 - a = [1, 3], b = [1, 2]。はじめ A = 1010。A1 と A1 の入れ替え後 A = 1010。A3 と A2 の入れ替え後 A = 1100。 - a = [1, 3], b = [2, 1]。はじめ A = 1010。A1 と A2 の入れ替え後 A = 0110。A3 と A1 の入れ替え後 A = 1100。 - a = [3, 1], b = [1, 2]。はじめ A = 1010。A3 と A1 の入れ替え後 A = 1010。A1 と A2 の入れ替え後 A = 0110。 - a = [3, 1], b = [2, 1]。はじめ A = 1010。A3 と A2 の入れ替え後 A = 1100。A1 と A1 の入れ替え後 A = 1100。 この 4 つの結果のうち、3 つで A = B となっています。よって、P = 3 / 4 であり、Z = 3 となります。
Sample Explanation 2
A の要素の入れ替えによって A が変化することはなく、したがって必ず A = B となります。
Sample Explanation 3
三回の A の要素の入れ替えがどのように起こっても、A に含まれる 1 は適切な位置に移動します。