chenfy27的刷题记录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

模板-组合数comb

使用前需要初始化,执行一次comb.init(n),n为C(n,m)中最大的n。初始化时间复杂度为O(n),后续每次求comb(n,m)时间复杂度为O(1)。

std::vector<mint> fac, ifac;
struct Comb {
void init(int n) {
fac.assign(n + 1, 1);
for (int i = 1; i <= n; i++) {
fac[i] = fac[i - 1] * i;
}
ifac.resize(n + 1);
ifac[n] = fac[n].inv();
for (int i = n - 1; i >= 0; i--) {
ifac[i] = ifac[i + 1] * (i + 1);
}
}
int operator()(int n, int k) {
assert(n <= fac.size());
mint ans = fac[n] * ifac[k] * ifac[n - k];
return ans.val();
}
}comb;

posted on   chenfy27  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示