正解是指数型母函数+FFT。
才学了多项式,做了一道比较好的题了。
首先有三个斧子被偷了。
我们考虑构造一种指数型母函数。
就是说一种多项式吧,我的理解。
系数是方案,下标,也就是所谓的元指数代表的是价值。
这样如果两个母函数相乘的话,指数相加,系数相乘。
正好就是两个单元合并之后的方案和价值。
$A(x),B(x),C(x)$分别代表一把相同的斧子用价值为x,2把为x,3把为x的方案数。
容斥一下。
三把的答案就是$A(x)*A(x)*A(x)-C_3^1A(x)B(x)+2C(x)$
解释一下,三把相乘得到每把斧子有三把的方案,但是每个只有一把,所以减掉有两把相同的,但是不知道是哪两把,所以乘$C_3^1$,最后发现两把相同的也包含三把相同的但是减掉了三次,而应当减一次,所以加回来两次。
要除以6,因为默认了有第一把第二把和第三把。
两把的话就是$A(x)*A(x)*-B(x)$要除以2。
同样简单的容斥即可。
一把就是$A(x)$了。
然后$FFT$乘一下就行了。
还没搞懂$NTT$。
猜测一下$NTT$的原理应该是和$FFT$一样的。
只不过是用了两个不同的群吧。
$FFT$用的是复数群,群运算是复数的$+-*/$。
$NTT$用的是$Z_p$也就是同余系,群运算是整数的$+-*/ mod $。
能够相通是因为对于复数群的$n$次单位根$w_n^1$,$Z_p$中有具有相同性质的原根$g$。
我猜。。。