This documentation is automatically generated by online-judge-tools/verification-helper
以降では $N$ を正の整数とし, $(\!(M)\!)$ を $N$ 未満の非負整数全体の集合とする. つまり, $(\!(M)\!)=\{0,1,2 \dots, M-1\}$ である.
長さ $2^N$ の数列 $A=(A_i)_{0 \leq i \lt 2^N}, B=(B_j)_{0 \leq j \lt 2^N}$ に対し, $A,B$ の Xor Convolution $A \oplus B$ を
\[A \oplus B:=\left(\sum_{\substack{0 \leq i,j \lt 2^N \\ i ~\oplus~ j=k}} A_i B_j \right)_{0 \leq k \lt 2^N}\]と定義する.
なお, 写像 $\operatorname{bit}: \mathcal{P}((\!(N)\!)) \to (\!(2^N)\!)$ を
\[\operatorname{bit}(S):=\sum_{a \in S} 2^a\]と定義すると, $\operatorname{bit}$ はこの2つモノイド $((\!(2^N)\!), \oplus), (\mathcal{P}((\!(N)\!)), \triangle)$ 間の同型写像になることから, 次のような言い換えができる.
$A,B$ は添字集合が $\mathcal{P}((\!(N)\!))$ である列であるとする. このとき, $A=(A_S)_{S \in \mathcal{P}((\!(N)\!))}, B=(B_T)_{T \in \mathcal{P}((\!(N)\!))}$ の Xor Convolution $A \oplus B$ を
\[A \oplus B:=\left(\sum_{\substack{S,T \in \mathcal{P}((\!(N)\!)) \\ S \triangle T=U}} A_S B_T \right)_{U \in \mathcal{P}((\!(N)\!))}\]と定義する.
def Fast_Walsh_Hadamard_Transform_XOR(A):
""" XOR に関する Walsh_Hadamard_Transform を行う.
A: List
"""
N=len(A)
h=(N-1).bit_length()
for k in range(h):
bit=1<<k
for i in range(N):
if i&bit==0:
x=A[i]
y=A[i|bit]
A[i]=(x+y)%Mod
A[i|bit]=(x-y)%Mod
def Fast_Inverse_Walsh_Hadamard_Transform_XOR(A):
""" XOR に関する逆 Walsh_Hadamard_Transform を行う.
A: List
"""
Fast_Walsh_Hadamard_Transform_XOR(A)
N_inv=pow(len(A), -1, Mod)
for i in range(len(A)):
A[i] = (A[i] * N_inv) % Mod
def Convolution_XOR(A,B):
""" XOR 演算に関する畳込みを行う.
A,B: List
"""
N=len(A); M=len(B)
L=1<<(max(N,M)-1).bit_length()
if min(N,M)<64:
C=[0]*L
for i in range(N):
for j in range(M):
C[i^j]+=A[i]*B[j]
C[i^j]%=Mod
return C
A=A+[0]*(L-N)
B=B+[0]*(L-M)
Fast_Walsh_Hadamard_Transform_XOR(A)
Fast_Walsh_Hadamard_Transform_XOR(B)
for i in range(N):
A[i]*=B[i]
A[i]%=Mod
Fast_Inverse_Walsh_Hadamard_Transform_XOR(A)
return A
def Convolution_Power_XOR(A,k):
""" XOR 演算に関する k 回の畳込みを行う.
A,B: List
"""
N=len(A)
L=1<<(N-1).bit_length()
A=A+[0]*(L-N)
Fast_Walsh_Hadamard_Transform_XOR(A)
A=[pow(A[i],k,Mod) for i in range(L)]
Fast_Inverse_Walsh_Hadamard_Transform_XOR(A)
return A
Mod=998244353
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
raise NotImplementedError
NotImplementedError