背景:
FWT
\text{FWT}
FWT代码真好打
.
.
.
...
...
题目传送门:
https://www.luogu.org/problemnew/show/CF453D
题意:
给定
a
,
b
a,b
a,b数组,求一个
c
i
=
∑
j
a
j
∗
b
c
a
l
c
o
n
e
(
i
,
j
)
c_i=\sum_{j}a_j*b_{calcone(i,j)}
ci=∑jaj∗bcalcone(i,j),其中
c
a
l
c
o
n
e
(
i
,
j
)
calcone(i,j)
calcone(i,j)表示
i
xor
j
i\text{ xor }j
i xor j的结果中
1
1
1的个数。
思路:
这才是真正的水题。
设
c
a
l
c
o
n
e
(
i
,
j
)
=
k
calcone(i,j)=k
calcone(i,j)=k,则有:
c
i
=
∑
k
∑
i
xor
j
=
k
a
j
∗
b
k
c_i=\sum_{k}\sum_{i\text{ xor }j=k}a_j*b_k
ci=k∑i xor j=k∑aj∗bk
然后面的一个
∑
\sum
∑就是
FWT
\text{FWT}
FWT的模板了,对于前面一个
∑
\sum
∑,直接枚举即可(个数为
1
1
1的是
log
\log
log级别的)。
时间复杂度不就是
log
2
\log^2
log2了吗。
代码:
这么水,就不打了吧。