尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:P10005 [集训队互测 2023] 基础寄术练习题

题解:P10005 [集训队互测 2023] 基础寄术练习题
📅 发布时间:2026/6/19 3:55:20

好牛的计数题。

题意:很简单了,不再赘述。

做法:

首先看到这个前缀和的乘积的倒数太难算了,一般来说肯定是考虑拆成 \(a\) 怎么样算一下,经过一定的手玩以后会发现 \(\sum\prod\limits_{i}\frac{1}{s_i}=\prod\frac1{a_i}\),但是我完全不知道怎么证明,然后点开了题解。

这里需要一个非常牛的转化,我们考虑现在有 \(n\) 种颜色的球,每种球分别有 \(a_i\) 个,我们钦定每种球最后一个出现位置的顺序并按这个顺序加入,那么合法的概率是:

\[\prod_{i=1}^n\frac{a_i(s_i-1)!}{s_i!} = \prod_{i=1}^n\frac{a_i}{s_i} \]

解释一下,我们只用保证第 \(i\) 个球加进去时,最后一个球是第 \(i\) 种即可,所以概率是上面这个。

同时,所有的顺序都可以,概率总和为 \(1\),就会有:

\[\prod_{i=1}^na_i(\sum\prod_{i=1}^n\frac1{s_i}) = 1 \]

所以上面那个结论就证明了。

那么对于 \(k=1\),直接 dp 就可以了,复杂度 \(O(n^2)\)。


接下来考虑 \(k=2\),即我们要对于第一个是 \(a_i\) 的概率额外乘上 \(a_i\),那我们肯定先枚举 \(a_i\),考虑序列合法的概率再乘上贡献,这里先算概率,贡献很好算。

注意到此时我们要求 \(a_1\) 一定是结束位置最早的,所以我们这里考虑容斥,令 \(S\) 集合中的元素在 \(a_1\) 之前就已经被放完了,其他的随意,那么此时的方案数为:

\[\binom{\sum s_i}{s_1,s_2,\cdots s_k}\binom{\sum{s_i} + a_1 - 1}{a_1-1}\binom{\sum a_i}{\sum s_i+a_1} \]

解释一下,第一个是分配 \(S\) 内部的顺序,第二个是令 \(a_1\) 和 \(S\) 一起放,这时 \(a_1\) 必须在最后放一个,第三个就是所有数一起排。

把上面这个东西展开整理,可以得到:

\[\binom{\sum a_i}{a_1,a_2,\cdots a_n}\frac{a_1}{\sum s_i+a_1} \]

因为我们求的是概率,所以把前面的方案数会除掉。然后再乘上容斥系数。

那么对于所有的 \(S\),贡献为:

\[\sum a_1\prod_{i=1}^n\frac{1}{a_i}\sum_{S}\frac{a_1}{\sum s_i+a_1}(-1)^{|S|} \]

我们用 dp 计算这个东西,看看我们需要什么,只有 \(\sum s_i+a_1\) 无法单独计算,还有 \(a_1\) 会有额外贡献,所以我们 dp 中就只需要记录选了多少个数,\(\sum_{}s_i+a_1\) 还有 \(a_1\) 选没选定就可以,转移时考虑不选,选成 \(a_1\),选入 \(S\),选入 \(\bar S\) 即可,复杂度 \(O(n^4)\)。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
int n, m, k, mod, dp[maxn][maxn], inv[maxn * maxn];
void prepare() {inv[0] = inv[1] = 1;for (int i = 2; i <= n * m; i++)inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
}
void solve1() {dp[0][0] = 1;for (int i = 1; i <= m; i++)for (int j = 0; j <= n; j++)dp[i][j] = (dp[i - 1][j] + 1ll * dp[i - 1][j - 1] * inv[i] % mod) % mod;cout << dp[m][n] << endl;
}
int f[2][maxn][maxn * maxn][2], lim[maxn];
void solve2() {int cur = 0;f[0][0][0][0] = 1;for (int i = 1; i <= m; i++)lim[i] = (i > n ? lim[i - 1] + n : lim[i - 1] + i);for (int i = 1; i <= m; i++) {cur ^= 1; memset(f[cur], 0, sizeof(f[cur]));for (int j = 0; j <= n; j++) {for (int k = 0; k <= lim[i]; k++) {// 不选f[cur][j][k][0] = f[cur ^ 1][j][k][0], f[cur][j][k][1] = f[cur ^ 1][j][k][1];// 选定为 a1if(k >= i && j)f[cur][j][k][1] = (f[cur][j][k][1] + 1ll * f[cur ^ 1][j - 1][k - i][0] * i % mod) % mod;// 选为 Sif(k >= i && j)f[cur][j][k][0] = (f[cur][j][k][0] - 1ll * f[cur ^ 1][j - 1][k - i][0] * inv[i] % mod + mod) % mod,f[cur][j][k][1] = (f[cur][j][k][1] - 1ll * f[cur ^ 1][j - 1][k - i][1] * inv[i] % mod + mod) % mod;// 选入S补if(j)f[cur][j][k][0] = (f[cur][j][k][0] + 1ll * f[cur ^ 1][j - 1][k][0] * inv[i] % mod) % mod,f[cur][j][k][1] = (f[cur][j][k][1] + 1ll * f[cur ^ 1][j - 1][k][1] * inv[i] % mod) % mod;}}//	cout << f[cur][1][2][1] << endl;}int ans = 0;for (int i = 1; i <= n * m; i++)ans = (ans + 1ll * f[cur][n][i][1] * inv[i] % mod) % mod;cout << ans << endl;
}
signed main() {cin >> n >> m >> k >> mod;prepare();if(k == 1) solve1();elsesolve2();return 0;
}

相关新闻

  • 同步和互斥的基本概念
  • 盲盒一番赏小应用用户需求分析:从行为动机到功能诉求的深度拆解
  • C++ IO 库全方位解析:从基础到实战 - 指南

最新新闻

  • 如何永久保存微信聊天记录?WeChatMsg终极本地化数据管理指南
  • 2026年 北京防水堵漏/楼顶防水/外墙防水/卫生间防水/管道测漏/精准测漏榜单:专业施工与隐蔽工程口碑之选 - 品牌发掘
  • 2026昆山防水补漏服务商适配指南:昆山鼎壹万防水补漏公司及本地优质服务商深度解析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 打造你的“开发战斗机”:VS Code 扩展推荐指南(从入门到入土版)
  • NSK高速精密滚珠丝杠PSS1520技术详述
  • 深圳家电维修平台推荐:本地实测较好的几家服务商深度对比——2026年6月最新发布 - 一步到家

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号