组合八题

组合八题

把球放进盒子里,求方案数。

编号 球是否相同 盒子是否相同 盒子是否为空
A 0 0 0
B 0 0 1
C 0 1 0
D 0 1 1
E 1 0 0
F 1 0 1
G 1 1 0
H 1 1 1

1|0求组合数

原理 Cnm=n!m!(nm)!

namespace C{ long long ny[N], jc[N]; void init(){ ny[0] = ny[1] = jc[0] = jc[1] = 1; for(int i = 2; i < N; i++) ny[i] = (MOD - MOD / i) * ny[MOD % i] % MOD; for(int i = 2; i < N; i++) jc[i] = i * jc[i - 1] % MOD, ny[i] = ny[i] * ny[i - 1] % MOD; } long long C(int x, int y){ if(x > y) return 0; return jc[y] * ny[x] % MOD * ny[y - x] % MOD; } }
#include<iostream> #include<cstring> using namespace std; const int N1 = 5005, N2 = 2e5 + 10, MOD = 998244353; int n, m, f[N1][N1], ny[N2], jc[N2], s[N1][N1]; int C(int x, int y){ if(x > y) return 0; return 1ll * jc[y] * ny[x] % MOD * ny[y - x] % MOD; } int qpow(long long x, int k){ long long ans = 1; while(k){ if(k & 1) ans = ans * x % MOD; x = x * x % MOD, k >>= 1; } return ans; } int main(){ fill(f[0], f[0] + 5003, 1); s[0][0] = 1; for(int i = 1; i <= 5000; i++){ for(int j = 1; j <= 5000; j++){ f[i][j] = (f[i][j - 1] + ((i >= j)? f[i - j][j] : 0)) % MOD; s[i][j] = (1ll * j * s[i - 1][j] + s[i - 1][j - 1]) % MOD; } } ny[0] = ny[1] = jc[0] = jc[1] = 1; for(int i = 2; i <= 2e5; i++) ny[i] = 1ll * (MOD - MOD / i) * ny[MOD % i] % MOD; for(int i = 2; i <= 2e5; i++) jc[i] = 1ll * i * jc[i - 1] % MOD, ny[i] = 1ll * ny[i] * ny[i - 1] % MOD; cin >> n >> m; if(n < m) cout << "0\n"; else cout << f[n - m][m] << "\n"; cin >> n >> m; cout << f[n][m] << "\n"; cin >> n >> m; cout << C(m - 1, n - 1) << "\n"; cin >> n >> m; cout << C(m - 1, n + m - 1) << "\n"; cin >> n >> m; int ans = 0; for(long long i = 0, t = 1; i <= m; i++, t *= -1) ans = (ans + t * C(i, m) * qpow(m - i, n) % MOD + MOD) % MOD; cout << 1ll * ans * ny[m] % MOD << "\n"; cin >> n >> m; ans = 0; for(int i = 1; i <= m; i++) ans = (ans + s[n][i]) % MOD; cout << ans << "\n"; cin >> n >> m; ans = 0; for(long long i = 0, t = 1; i <= m; i++, t *= -1) ans = (ans + t * C(i, m) * qpow(m - i, n) % MOD + MOD) % MOD; cout << ans << "\n"; cin >> n >> m; cout << qpow(m, n) << "\n"; return 0; }

__EOF__

本文作者louisliang
本文链接https://www.cnblogs.com/louisliang/articles/18081436.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   louisliang  阅读(1)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示