傳送門
題目翻譯:給定兩個 n
nn 次多項式 a,b
a,ba,
b 和乙個整數 c
cc,求 a×b
ca\times b^c
a×bc
在模 x
nx^n
xn意義下的卷積
顯然就是個迴圈卷積,所以只要代入 ωnk
\omega_n^
ωnk
進去求出點值,然後插值就好了
???n
nn 不是 2
k2^k
2k的形式,不能直接 ntt
nttnt
t怎麼辦呢?
根據題目性質,可以把 n
nn 拆成 2a1
3a25
a37a
42^3^5^7^
2a13a
25a
37a
4的形式
這啟示我們每次不是每次分成兩半而是拆分成 3/5
/7
3/5/7
3/5/
7 次,然後再合併點值
設 f (x
)=∑a
ixi,
fr(x
)=∑a
ip+r
xi
f(x)=\sum a_ix^i,f_r(x)=\sum a_x^i
f(x)=∑
aix
i,fr
(x)
=∑ai
p+r
xi那麼 f(x
)=∑x
rf(x
p)
f(x)=\sum x^rf(x^p)
f(x)=∑
xrf(
xp)根據單位複數的性質(消去引理和折半引理)那麼
f (ω
nan+
b)=∑
ωnp(
an+b
)rfr
(wnb
)f(\omega_n^)=\sum \omega_^f_r(w_n^b)
f(ωnan
+b)
=∑ωn
p(an
+b)r
fr
(wnb
)那麼只需要寫乙個每次分 p
pp 份的 fft
fftff
t 就好了
# include
using
namespace std;
typedef
long
long ll;
const
intmaxn
(5e5+5
);int n, c, a[maxn]
, b[maxn]
, tmp[maxn]
, g, pri[
233333
], tot, pw[2]
[maxn]
, mod, r[maxn]
;inline
intpow
(ll x,
int y)
inline
void
inc(
int&x,
int y)
intdfs
(int s,
int p,
int cur,
int blk)
inline
void
dft(
int*p,
int opt)
if(opt ==-1
)for
(c =
pow(n, mod -2)
, i =
0; i < n;
++i) p[i]
=(ll)p[i]
* c % mod;
}int
main()
for(i =
0; i < n;
++i)
scanf
("%d"
,&a[i]);
for(i =
0; i < n;
++i)
scanf
("%d"
,&b[i]);
pw[0]
[0]= pw[1]
[0]=
1, pw[0]
[1]= g, pw[1]
[1]=
pow(g, mod -2)
;for
(i =
2; i < n;
++i) pw[0]
[i]=
(ll)pw[0]
[i -1]
* g % mod, pw[1]
[i]=
(ll)pw[1]
[i -1]
* pw[1]
[1]% mod;
for(i =
0; i < n;
++i) r[i]
=dfs(0
, i,
1, n)
;dft
(a,1),
dft(b,1)
;for
(i =
0; i < n;
++i) a[i]
=(ll)a[i]
*pow
(b[i]
, c)
% mod;
dft(a,-1
);for(i =
0; i < n;
++i)
printf
("%d\n"
, a[i]);
return0;
}
Luogu4191 CTSC2010 效能優化
傳送門 題目翻譯 給定兩個 n 次多項式 a,b 和乙個整數 c 求 a times b c 在模 x n 意義下的卷積 顯然就是個迴圈卷積,所以只要代入 omega n 進去求出點值,然後插值就好了 n 不是 2 k 的形式,不能直接 ntt 怎麼辦呢?根據題目性質,可以把 n 拆成 2 3 5 ...
Luogu食物鏈做法2
這個題的做法2比做法1好想 以下距離都在 mod 3意義下 到最後所有動物的關係可以用樹表示,d i 表示節點i到當前fa i 的距離,我們規定若d x 1 d y 規定成 1也可以 代表x吃y 那麼如果x y同族,那麼如果規定x當前祖先到y當前距離為的d y d x 這樣x到y祖先距離為d x 到...
CTSC2018 Day2T1 Juice混合果汁
題解 在考場上a掉的題。把美味度排個序,然後按照 p為權值建立主席樹,把每個果汁按照拍好的順序新增進去。主席樹上維護總公升數cnt以及總 sum。對於每個詢問,我們二分乙個美味值,check的時候去主席樹上查詢大於等於這個美味值的果汁中購買l公升的 即可。1 include2 include3 de...