問題一覧 > 通常問題

No.1741 Arrays and XOR Procedure

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 104
作問者 : Shirotsume / テスター : nok0 とりゐ
3 ProblemId : 7178 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-04-08 19:28:09

問題文

Shirotsume は長さ NN の数列 A=[A1,A2,AN]A = [A_1, A_2, \dots A_N] を持っています。数列 AA の値は全て 00 または 11 です。

数列 AA に対して、以下の操作を考えます。

    操作:操作を行う前の数列 AA の長さを MM とする。数列 AA を数列 A=[(A1  A2),(A2  A3),(A3  A4),...(AM1  AM)]A' = [(A_1\ \oplus\ A_2), (A_2\ \oplus\ A_3), (A_3\ \oplus\ A_4), ... (A_{M - 1}\ \oplus\ A_M)] に置き換える。

ただし、a  ba\ \oplus\ baabb の排他的論理和(XOR)を表します。

操作を 11 度行うと、数列は長さが 11 短くなります。数列 AA に操作を N1N - 1 回繰り返し適用すると、AA は長さ 11 の数列 [0][0] または [1][1] になります。

Shirotsume は長さが NN である数列 AA を一部隠して、長さ NN の数列 BB としてあなたに教えます。

数列 BB1,0,1-1, 0, 1 の値のみからなり、1iN1 ≤ i ≤ N について、Bi=0B_i = 0 またはBi=1B_i = 1 ならば Ai=BiA_i = B_iBi=1B_i = -1 ならAiA_i の値が隠されていることを表します。

AA の要素のうち隠されている要素の個数を PP とすると、AA としてありえる数列は 2P2^P 通りありますが、そのうち操作を N1N - 1 回行った後 A=[1]A = [1] になるものは何通りありますか? 998244353998244353 で割ったあまりを求めてください。

制約

  • 入力は全て整数
  • 2N2×1052 \leq N \leq 2 \times 10^5
  • BiB_i (1iN)(1 \leq i \leq N) の値は 1,0,1-1, 0, 1 のいずれか

入力

入力は以下の形式で標準入力から与えられる。
NN
B1B_1 B2B_2 B3B_3 ...... BNB_N

出力

操作を N1N - 1 回行った結果 A=[1]A = [1] になるものの個数を 998244353998244353 で割ったあまりを出力せよ。

最後に改行すること。

サンプル

サンプル1
入力
3
-1 -1 1
出力
2

隠されている要素 22 つのそれぞれに 0,10, 1 を割り当てる方法は全部で 44 通りあります。そのそれぞれについて操作を行った結果を以下に示します。

[0,0,1][(0  0),(0  1)]=[0,1],[0,1][(0  1)]=[1][0, 0, 1] → [(0\ \oplus\ 0), (0\ \oplus\ 1)] = [0, 1], [0, 1] → [(0\ \oplus\ 1)] = [1]

[0,1,1][(0  1),(1  1)]=[1,0],[1,0][(1  0)]=[1][0, 1, 1] → [(0\ \oplus\ 1), (1\ \oplus\ 1)] = [1, 0], [1, 0] → [(1\ \oplus\ 0)] = [1]

[1,0,1][(1  0),(0  1)]=[1,1],[1,1][(1  1)]=[0][1, 0, 1] → [(1\ \oplus\ 0), (0\ \oplus\ 1)] = [1, 1], [1, 1] → [(1\ \oplus\ 1)] = [0]

[1,1,1][(1  1),(1  1)]=[0,0],[0,0][(0  0)]=[0][1, 1, 1] → [(1\ \oplus\ 1), (1\ \oplus\ 1)] = [0, 0], [0, 0] → [(0\ \oplus\ 0)] = [0]

サンプル2
入力
5
0 0 1 0 0
出力
0

Shirotsume が隠している要素の個数は 00 であるかもしれません。また、すべての要素を隠しているかもしれません。

サンプル3
入力
7
-1 0 1 0 1 1 -1
出力
2

ここでは示しませんが、答えは非常に大きくなる場合があります。998244353998244353 で割ったあまりを求めてください。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。