題目描述給定長度為2
n2^n
2n兩個序列a,b
a,ba,
b,設ci
=∑j⊕
k=ia
jb
kc_i=\sum_a_jb_k
ci=∑
j⊕k=
iaj
bk
分別當⊕
\oplus
⊕是or,and,xor時求出c
輸入格式
第一行乙個數n。 第二行2n個
數a0.
.a2n
−1
2^n個數a_0..a_
2n個數a0
..a
2n−1
第三行2n個
數b0.
.b2n
−1
2^n個數b_0..b_
2n個數b0
..b
2n−1
輸出格式
三行每行2
n2^n
2n個數,分別代表⊕
\oplus
⊕是or,and,xor時c0.
.c2n
−1
c_0..c_
c0..c
2n−1
的值 mo
d998244353
\bmod\ 998244353
mod998
2443
53
輸入輸出樣例輸入 #1
22 4 6 8
1 3 5 7
輸出 #12 22 46 250
88 64 112 56
100 92 68 60
說明/提示n≤17n。
#include#include#include#includeusing namespace std;
const int mod = 998244353,inv2 = (mod + 1) >> 1;
typedef long long ll;
inline static const void reduce(int&x)
inline static const void mulor(int*a,int*b,int*c,int lm)
快速沃爾什變換
用於解決集合邏輯運算的演算法。就是能夠造出類似多項式卷積的形式 可以是 證明解釋什麼的。找了大半天了,也沒找到個自己能看懂的,好吧,背模板 題面 給出n個小於2 20的數,指定 其中之一為操作opt,求給定的n個數中任選兩個,經過opt操作後能得到的最大值是多少?solution 記fi 數字i出現...
基本操作 快速沃爾什變換
還是補全一下科技樹吧.之後可能就專心刷刷題?雖然感覺我的科技樹連開始的一層都沒點全。fwt 可以用來解決多項式的位運算卷積,也就是對於兩個多項式 a,b 求乙個 c 滿足 c k sum limits n sum limits n i oplus j k a i times b j 常見的有 and...
FFT 快速傅利葉變換 FWT 快速沃爾什變換
實在是 美麗的數學啊 關於傅利葉變換的部落格 講的很細緻 非常易於理解 大概能明白傅利葉變換是幹嗎的了 但是還是不能明白為什麼用傅利葉變換來算多項式求和 在多項式中,dft就是係數表式轉換成點值表示的過程。我們熟知的是多項式的係數表示法,通過給定一組 來確定乙個唯一的多項式 而多項式還可以有另一種表...