1. 程式人生 > >【bzoj3625】【CF438E/round250E】小朋友和二叉樹【FFT/NTT】【多項式求逆】【多項式開根】

【bzoj3625】【CF438E/round250E】小朋友和二叉樹【FFT/NTT】【多項式求逆】【多項式開根】

題目連結
題解:我們設f[i]表示權值為i的二叉樹的數目,g[i]為i這個值是否在C集合中出現。則很容易得到f[x]=i1xg[i]j=0xif[j]f[xij],且f[0]=1
因此,觀察可得f=gf2+1
=>gf2f+1=0
=>f=1±14g2g
=>f=4g2g(1±14g)
=>f=21±14g
因為g常數項為0,所以14g常數項必定為1。如果

f=21±14g取負號,無法進行多項式求逆。但是蒟蒻博主暫時沒有搞明白取負號為什麼一定不行。
所以f=21+14g
因此我們可以通過多項式開根和多項式求逆得到f。
它們的大體思路都是倍增。
多項式求逆:
A(x)B(x)1(modxn)
A(x)B(x)10(modxn)
(A(x)B(x)1)20(modx2n)
A(x)(2B(x)B(x)2A(x
))1(modx2n)

就這樣一層一層推上去就可以了。
多項式開根:
B(x)2A(x)(modxn)
B(x)2A(x)0(modxn)