Kyopro Library
読み取り中…
検索中…
一致する文字列を見つけられません
xor_convolution.hpp
[詳解]
1
#
include
"../../kyopro_library/template.hpp"
2
3
/// @brief 高速アダマール変換
4
template
<
typename
T>
5
void
FHT
(vector<T>& a,
bool
inv=
false
) {
6
int
h=__lg(a.size());
7
for
(
int
i=0; i<h; i++)
for
(
int
j=0; j<1<<h; j++)
if
(~j>>i&1) {
8
T x=a[j],y=a[j|1<<i];
9
a[j]=x+y,a[j|1<<i]=x-y;
10
if
(inv) a[j]/=2,a[j|1<<i]/=2;
11
}
12
return
;
13
}
14
15
/// @brief XOR Convolution
16
/// @brief C[k] = Σ(i^j = k) A[i]B[j] なる C を返す
17
/// @note O(n log(n))
18
template
<
typename
T>
19
vector
<
T
>
XorConvolution
(vector<T> a, vector<T> b) {
20
FHT(a); FHT(b);
21
for
(
int
i=0; i<a.size(); i++) a[i]*=b[i];
22
FHT(a,
true
);
23
return
a;
24
}
FHT
void FHT(vector< T > &a, bool inv=false)
高速アダマール変換
Definition
xor_convolution.hpp:5
XorConvolution
vector< T > XorConvolution(vector< T > a, vector< T > b)
XOR Convolution
Definition
xor_convolution.hpp:19
math
xor_convolution.hpp
構築:
1.13.2