No.2082 AND OR XOR
レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 24
作問者 : taiga0629kyopro / テスター : hamamu 👑 ygussany
タグ : / 解いたユーザー数 24
作問者 : taiga0629kyopro / テスター : hamamu 👑 ygussany
問題文最終更新日: 2022-09-17 20:50:53
問題文
非負整数 $x, y$ に対して、二項演算子 $*$ を次のように定義します。
- $x$ $*$ $y=\bigl ( A×(x\ \mathrm{AND}\ y)+B×(x\ \mathrm{OR}\ y)+C×(x\ \mathrm{XOR}\ y) \bigr )\ \mathrm{mod}\ 4 $
長さ $N$ の数列 $X$ のうち以下の条件を満たすものを良い数列と呼ぶことにします。
- 各要素は $0,1,2,3$ のいずれかである。
- $(\dots((X_1*X_2)*X_3)*\dots)*X_N=(\dots((X_N*X_{N-1})*X_{N-2})*\dots)*X_1$ が成り立つ。
良い数列の個数を求めてください。ただし、答えは非常に大きな整数になる場合があるので、答えを $998244353$ で割った余りを出力してください。
︎$\mathrm{AND}$, $\mathrm{OR}$, $\mathrm{XOR}$ とは (クリックで開く)
$\mathrm{AND}$, $\mathrm{OR}$, $\mathrm{XOR}$ はそれぞれビットごとの論理積、論理和、排他的論理和を表します。
入力
$N$ $A$ $B$ $C$
出力
良い数列の個数を $998244353$ で割った余りを出力してください。
サンプル
サンプル1
入力
3 1 1 1
出力
32
例えば、$X=(0,0,0)$ は良い数列です。一方、$X=(1,0,0)$ は良い数列ではありません。なぜならば、 $(X_1*X_2)*X_3=(1*0)*0=2*0=0$ であり、$(X_3*X_2)*X_1=(0*0)*1=0*1=2$ より $(X_1*X_2)*X_3 \neq (X_3*X_2)*X_1$ だからです。
サンプル2
入力
3 2 3 3
出力
40
サンプル3
入力
100 0 0 0
出力
982924732
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。