当前位置: 首页 > news >正文

CCPC2025哈尔滨站-H. 匹配

时停问题,考虑势能函数。设单个集合的势能函数为 \(f(x)\),其中 \(x\) 为集合大小,这是合法的。总的势能 \(\Phi = \sum\limits_{s\in S} f(|s|)\).考虑列出方程解出 \(f\)

满足鞅的时停定理的势能 \(\Phi\) 满足 \(\Phi + 1 = \Phi'\),其中 \(\Phi'\) 是新的总势能。

对每一个单独的大小为 \(a\) 的集合,假设势能函数满足线性性,可以给出方程:

\[f(a) + {a\over 2m} = \sum\limits_{i = 0} ^ {m} {{a\choose i} \times {2m - a\choose m - i}\over{2m\choose m}} \times f(2i) \]

解释:

  1. 我们期望最后的势能之差为 \(1\),由于总数为 \(2m\),每个 \(a\) 的占比为 \(\frac{a}{2m}\),再乘上 \(1\) 就得到了 \(LHS\) 的第二项。
  2. 然后求解转移到 \(f(2i)\) 的概率。发现匹配的操作过程等价于选定 \(m\) 个元素,将不在其中的另外 \(m\) 个元素删除,再将选定的元素复制一遍到原有的集合内部。总方案数为 \({2m\choose m}\),由于假定的线性性,当前这个大小为 \(a\) 的集合转化为另一个集合的势能之差,考虑在该集合的 \(a\) 个中有 \(i\) 个被选,在集合外的 \(2m - a\) 个元素中有 \(m - i\) 个被选,乘起来就是上面的式子了。

这样就能通过高斯消元得出答案,最后答案为 \(f(2m) - \sum\limits_{i = 1} ^ n f(a_i)\).

mint fac[N], ifac[N];
inline mint C(int n, int r) {if (n < 0 || r < 0 || n < r) return mint(0);return fac[n] * ifac[r] * ifac[n - r];
}
inline mint iC(int n, int r) {if (n < 0 || r < 0 || n < r) return mint(0);return ifac[n] * fac[r] * fac[n - r];
}
int R;
inline void table(int lim) {if (!R) fac[0] = 1;if (lim <= R) return ;forn (i, R + 1, lim) fac[i] = fac[i - 1] * mint(i);ifac[lim] = q_pow(fac[lim]);form (i, lim - 1, R) ifac[i] = ifac[i + 1] * mint(i + 1);R = lim;
}
int n, m, r; mint mat[N][N];
inline void clear() {forn (i, 0, r) forn (j, 0, r + 1) mat[i][j] = 0;
}
inline void solve() {cin >> n >> m;table(m << 1);r = m << 1;mat[0][0] = 1, mat[r][r] = 1;mint inv = q_pow(mint(r));rep (a, 1, m << 1) {mat[a][r + 1] = mint(a) * inv;for (int i = 0; i <= a; ++i)mat[a][i << 1] = C(a, i) * C(r - a, m - i) * iC(r, m);mat[a][a] -= 1;}forn (i, 0, r) {int mx = i;forn (j, i + 1, r) if (mat[j][i].r) mx = j;forn (j, 0, r + 1) swap(mat[i][j], mat[mx][j]);assert(mat[i][i].r);inv = q_pow(mat[i][i]);forn (j, 0, r) if (i ^ j) {mint tmp = mat[j][i] * inv;forn (k, i + 1, r + 1)mat[j][k] -= mat[i][k] * tmp;}}mint ans = 0;while (n --> 0) {int x;cin >> x;ans -= mat[x][r + 1] * q_pow(mat[x][x]);}cout << ans.r << '\n';
}
http://www.jsqmd.com/news/38849/

相关文章:

  • 通过开发环境部署工具安装qt相关c++开发环境
  • 第23天(简单题中等题 二分查找)
  • Cinema4D 2025保姆级下载安装教程|含安装包获取+新手入门指南
  • 2014 吉林省赛题解 | CCUT应用OJ题解——F[X] + X = N
  • 洛谷 P4859 已经没有什么好害怕的了 题解(DP,二项式反演)
  • 01321:棋盘问题
  • C 变量的作用域与生存周期
  • 模式识别与机器学习课程笔记(11):深度学习 - 详解
  • 05.创建型 - 简单工厂模式(Simple Factory Pattern)
  • RabbitMQ延迟队列rabbitmq_delayed_message_exchange
  • HaluMem:揭示当前AI记忆系统的系统性缺陷,系统失效率超50%
  • 团队作业2-需求规格说明书
  • Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)
  • 20251112 正睿
  • 如何根据色带计算电阻阻值
  • 25.11.12 差分约束算法
  • 11/12
  • Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例 - 实践
  • 解决Cursor编辑器无法通过include path识别C++头文件的问题
  • 麒麟桌面系统2503安装openjdk21
  • 重组蛋白基础与技术概述
  • Day36(6)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01
  • E. Journey
  • Dynamics 365 Field Service跨站脚本欺骗漏洞分析
  • Linux优秀的系统--信号(3--信号的保存、阻塞)
  • 深入解析:SQL提数与数据分析指南
  • 日报11.12
  • 大家来写 ICPC 西安(没写完)
  • [译] 省略 Async 与 Await
  • 你的代码正在腐烂!你的团队正走在死亡螺旋上:技术债务积累的5个危险信号!