題目傳送門
題目大意:多次詢問,求貝爾數的第 n
nn 項。
先考慮只有乙個集合的情況,設 f
if_i
fi 表示 i
ii 個不同元素分成 1
11 個集合的方案數,顯然有 fi=
1f_i=1
fi=
1,由於不允許有空集,所以 f0=
0f_0=0
f0=0。
設 f
ff 的 egf
egfeg
f 為 f(x
)f(x)
f(x)
,發現 f(x
)f(x)
f(x)
正好就是 ex−
1e^x-1
ex−1
。然後考慮求答案:顯然題目要我們求的其實就是貝爾數,設貝爾數的第 n
nn 項為 b
nb_n
bn,設 g(x
)g(x)
g(x)
為 bb
b 的 egf
egfeg
f,那麼滿足 g(x
)=∑i
=0fi
i!
g(x)=\sum_ \dfrac
g(x)=∑
i=0
i!fi
,所以 g(x
)=ef
=eex
−1
g(x)=e^f=e^
g(x)=e
f=ee
x−1。
由於是 egf
egfeg
f,所以 bn=
[xn]
g(x)
×n
!b_n=[x^n]g(x)\times n!
bn=[x
n]g(
x)×n
!。順便紀念一下,除了求逆部分漏了個取模,第一次 一次寫對多項式全家桶!
**如下:
#include
#include
#include
#include
using
namespace std;
#define maxn 300010
#define mod 998244353
#define ms(f,x) memset(f,0,4<<(x))
#define bin(x) (1<<(x))
int t,n;
int inv[maxn]
,log_2[maxn]
;int
ksm(
int x,
int y)
int*w[30]
;void
prep
(int n)
}int limit,r[maxn]
;void
get(
int lg)
void
ntt(
int*f,
int lg,
int type=0)
}void
ntt(
int*f,
int*g,
int ln)
int a[maxn]
,b[maxn]
,c[maxn]
,d[maxn]
,e[maxn]
;void
getinv
(int
*f,int
*g,int ln)
getinv
(f,g,
(ln+1)
>>1)
;int lg=log_2[ln*2-
1];get
(lg);ms
(a,lg);ms
(b,lg)
;memcpy
(a,f,ln<<2)
;memcpy
(b,g,ln<<2)
;ntt
(a,lg)
;ntt
(b,lg)
;for
(int i=
0;i<
bin(lg)
;i++
)a[i]
=1ll*(
2-1ll*a[i]
*b[i]
%mod+mod)
%mod*b[i]
%mod;
ntt(a,lg,1)
;for
(int i=
0;i)g[i]
=1ll
*a[i]
*inv[
bin(lg)
]%mod;
}void
dao(
int*f,
int*g,
int ln)
void
jifen
(int
*f,int
*g,int ln)
void
getln
(int
*f,int
*g,int ln)
void
getexp
(int
*f,int
*g,int ln)
getexp
(f,g,
(ln+1)
>>1)
;ms(e,log_2[ln*2-
1]);
getln
(g,e,ln)
;for
(int i=
0;i)e[i]
=(f[i]
-e[i]
+mod)
%mod;e[0]
++;ntt(g,e,ln);}
int fac[maxn]
,inv_fac[maxn]
;voidwk(
int n)
int f[maxn]
,g[maxn]
;void
solve()
intmain()
LuoguP5748 集合劃分計數
乙個有 n 個元素的集合,將其分為任意個非空子集,求方案數。集合之間是無序的,設 f n 表示用 n 個元素組成的集合的個數,顯然 f n 1 設 f x 為 f 的指數型生成函式,那麼 f x sum frac f i x 的第 n 位就是 i 個元素個數之和為 n 的集合組合在一起的方案數。設 ...
洛谷P1978 集合
題目鏈結 顯然,我們是要把資料先排序的,然後從大到小列舉每個數,看是否能選上,能選就選,不能拉倒 若能,二分查詢a i k,若查詢成功,ans 將a i k標記為不能選擇 最後輸出答案即可 從小到大列舉會爆long long 1 include2 include3 include4 include5...
洛谷P1491 集合位置
每次有大的活動,大家都要在一起 聚一聚 不管是去好樂迪,還是避風塘,或者湯姆熊,大家都要玩的痛快。還記得心語和花兒在跳舞機上的激情與釋放,還記得草草的投籃技藝是如此的高超,還記得狗狗的槍法永遠是 s 還有不能忘了,胖子的歌聲永遠是讓我們驚叫的!今天是野貓的生日,所以想到這些也正常,只是因為是上學日,...