還是補全一下科技樹吧...之後可能就專心刷刷題?
雖然感覺我的科技樹連開始的一層都沒點全。。。
fwt 可以用來解決多項式的位運算卷積,也就是對於兩個多項式 $a,b$ ,求乙個 $c$ 滿足 $c_k = \sum\limits_^n\sum\limits_^n[i\oplus j == k]a_i \times b_j$
常見的有 $and,or,xor$ 卷積
式子就不推了,放個結論吧
令 $a$ 為乙個 $2^n$ 維向量
設 $a_0$ 為 $a$ 的前 $2^$ 維組成的向量, $a_1$ 為 $a$ 的後 $2^$ 維組成的向量
則對於 or 卷積:
$$fwt(a)=
\begin
(fwt(a_0),fwt(a_0) + fwt(a_1))& \text\\
a& \text
\end$$
順便,or 的 fwt 相當於對於每個非空集合求了子集和
對於 and 卷積:
$$fwt(a)=
\begin
(fwt(a_0) + fwt(a_1),fwt(a_1))& \text\\
a& \text
\end$$
對於 xor 卷積:
$$fwt(a)=
\begin
(fwt(a_0) + fwt(a_1),fwt(a_0) - fwt(a_1))& \text\\
a& \text
\end$$
#include#define ll long longview codeusing
namespace
std;
namespace
io return (hd==tl)?eof:*hd++;}
void flush()
void putchar(char c)
void write(int
x) if(x<0) x=-x,putchar('-'
);
while(x) ss[++top]=x%10,x/=10
;
while(top) putchar(ss[top]+'
0'),--top;
}intread()
}using
namespace
io;const
int maxn = 200010,mod = 998244353,inv2 = 499122177
;int
n,m,a[maxn],b[maxn];
inline
int inc(int x,int y)
inline
int dec(int x,int y)
inline
int skr(int x,int
t)return
res;
}inline
void fwt(int *a,int n,int t,int f)//
1:or , 2:and , 3:xor
else
if(t == 2
)
else
if(t==3
) }}
}}int
main()
wc2018 州區劃分
有乙個無向圖,你要把它劃分成 k 個州,要求每個州內不能存在尤拉迴路,每個州的滿意度是 $i$ 州的權值和除以前 $i$ 州的權值和 ,乙個劃分方案的滿意度是所有州滿意度的乘積,求所有劃分方案滿意度之和,膜 998244353
$n \leq 21$
sol:
記 $sig_s=\sum\limits_w_i \times [州內沒有尤拉迴路]$
顯然是乙個子集 dp:
$f_ = \frac\sum\limits_f_ \times sig_$
然後發現這是乙個子集卷積,一般是列舉一下集合大小,然後直接卷
haoi2015 按位或
一開始你有乙個數字 $0$ ,每秒你有 $p_i$ 的概率得到乙個$\in [0,2^n-1]$數字 $i$,與你現在的數字進行按位或,求期望多少秒能得到 $2^n-1$
$n \leq 20$
sol:
先最值反演
然後就是對於每個子集 $t$ 要求 $e(min\)$
發現只要有一位異或上了就可以了,那就是 $e(min\) = \fracp_s}$
現在就是對於每個 $t$ 要求所有與 $t$ 有交的集合權值和
發現有交的不好求,沒交的就是 $t$ 所有補集的子集,用 fwt 預處理子集和就行了
(其實不 fwt 也行,但這畢竟是一篇 fwt 部落格
快速沃爾什變換
用於解決集合邏輯運算的演算法。就是能夠造出類似多項式卷積的形式 可以是 證明解釋什麼的。找了大半天了,也沒找到個自己能看懂的,好吧,背模板 題面 給出n個小於2 20的數,指定 其中之一為操作opt,求給定的n個數中任選兩個,經過opt操作後能得到的最大值是多少?solution 記fi 數字i出現...
FFT 快速傅利葉變換 FWT 快速沃爾什變換
實在是 美麗的數學啊 關於傅利葉變換的部落格 講的很細緻 非常易於理解 大概能明白傅利葉變換是幹嗎的了 但是還是不能明白為什麼用傅利葉變換來算多項式求和 在多項式中,dft就是係數表式轉換成點值表示的過程。我們熟知的是多項式的係數表示法,通過給定一組 來確定乙個唯一的多項式 而多項式還可以有另一種表...
快速沃爾什變換 學習筆記
用來解決一類與位運算有關卷積問題 c i sum a j b k 2 基礎思想和fft類似,我們正變換求出乙個類似點值表示的東西,然後用它直接乘,然後逆變換。fft我們對下標奇偶分治。這裡求變換我們按位分治。與和或根據位運算的性質很好想,可以自己推一推異或記住就行了 二進位制運算的性質很強啊,重點在...