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

[CSP-S 2025] 员工招聘

退役了可以对着题目毫无心理压力地bb好爽(

CF1437F Emotional Fishermen 带给我们的启示:带限制的排列计数问题一般都很困难,我们可以使用 dp,容斥等手段约束整理限制,将限制整理成易于使用组合数计算排列数量的形式。

录取至少 \(m\) 个人没有什么好的转化手段,那么就以录取的状态为着手点,考虑给定一个状态 \(S\),其中第 \(i\) 次面试是否成功已经被钦定,此时有多少种满足状态 \(S\) 的排列。

考虑第 \(i\) 次面试 (\(s_i=1\)),前面已经录取了 \(j\) 个人,那么第 \(i\) 位的限制有一下几种:

  • 钦定录取:\(c_i>i-1-j\)
  • 钦定不录取:\(c_i\le i-1-j\)

我们按照这些限制填入对应的人,剩下 \(s_i=0\) 的位置就是一个全排列。

但现在还是非常难做,原因在于限制的类型不一样,一个 \(c_i>i-1-j\) 一个 \(c_i\le i-1-j\) 搞得人很难受。

「LibreOJ NOI Round #2」不等关系 告诉我们,我们可以用容斥的方式扭转限制!

具体地,针对 \(c_i>i-1-j\) 的限制,我们有两种处理:

  • 假装不存在,把它归到最后的全排列里。
  • 把它归于 \(c_i\le i-1-j\) 的限制,同时给方案数乘上一个 \(-1\) 的系数。

这个时候所有限制都变成了 \(c_i\le i-1-j\),并且你发现 \(i\) 变大时 \(i-1-j\) 必然单调不减,原先满足限制的人在 \(i\) 变大后仍然满足限制。

整理一下思路,我们现在希望同时刻画状态录取状态 \(S\) 和容斥的过程,考虑如何用 dp 完成这一点:

\(sum_i=\sum\limits_{j=1}^n [c_j\le i]\)\(f_{i,j,k}\) 表示前 \(i\) 次面试,钦定录取了 \(j\) 个人,并且已经确定了 \(k\) 个人的方案数。转移分几种:

  • \(i+1\) 次面试钦定为录取,且无视这次限制:\(f_{i,j,k}\to f_{i+1,j+1,k}\)
  • \(i+1\) 次面试钦定为录取,且考虑这次限制的容斥系数:\(-(sum_{i-j}-k)f_{i,j,k}\xrightarrow[]{} f_{i+1,j+1,k+1}\)
  • \(i+1\) 次面试钦定为不录取:\((sum_{i-j}-k)f_{i,j,k}\xrightarrow[]{} f_{i+1,j,k+1}\)

答案即为 \(\sum\limits_{x\ge m}\sum\limits_{y\le n} f_{n,x,y}\times (n-y)!\)。时间复杂度 \(\mathcal O(n^3)\),使用滚动数组控制空间复杂度即可。

#include <bits/stdc++.h>
#define pb emplace_back
#define fir first
#define sec secondusing i64 = long long;
using pii = std::pair<int, int>;constexpr int mod = 998244353;
void add(int& x, int y) { if ((x += y) >= mod) x -= mod; return; }
void sub(int& x, int y) { if ((x -= y) < 0) x += mod; return; }
int inc(int x, int y) { return (x + y) >= mod ? (x + y - mod) : (x + y); }
int dec(int x, int y) { return (x - y) < 0 ? (x - y + mod) : (x - y); }namespace binomial {std::vector<int> fac, ifac, inv;void init(int n) {fac.resize(n + 5, 0);ifac.resize(n + 5, 0);inv.resize(n + 5, 0);fac[0] = fac[1] = ifac[0] = ifac[1] = inv[1] = 1;for (int i = 2; i <= n; ++i) {fac[i] = 1ll * fac[i - 1] * i % mod;inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;ifac[i] = 1ll * ifac[i - 1] * inv[i] % mod;}return;}int C(int n, int m) {if (n < 0 || m < 0 || n < m) return 0;return 1ll * fac[n] * ifac[n - m] % mod * ifac[m] % mod;}
}int main() {std::cin.tie(nullptr)->sync_with_stdio(false);int n, m;std::cin >> n >> m;std::string s;std::cin >> s;std::vector<int> c(n), sum(n + 1, 0);for (int i = 0; i < n; ++i) std::cin >> c[i], ++sum[c[i]];for (int i = 1; i <= n; ++i) sum[i] += sum[i - 1];std::vector<std::vector<int>> dp(n + 1, std::vector<int>(n + 1, 0)), f(n + 1, std::vector<int>(n + 1, 0));dp[0][0] = 1;for (int i = 0; i < n; ++i) {if (s[i] == '0') continue;for (int j = 0; j <= i; ++j) {for (int k = 0; k <= i; ++k) {if (!dp[j][k]) continue;// 决定这个人录取add(f[j + 1][k], dp[j][k]);if (sum[i - j] > k) sub(f[j + 1][k + 1], 1ll * dp[j][k] * (sum[i - j] - k) % mod);// 决定这个人不录取if (sum[i - j] > k) add(f[j][k + 1], 1ll * dp[j][k] * (sum[i - j] - k) % mod);}}f.swap(dp);for (int j = 0; j <= i; ++j)for (int k = 0; k <= i; ++k)if (f[j][k]) f[j][k] = 0;}int ans = 0;binomial::init(n);for (int x = m; x <= n; ++x) {for (int y = 0; y <= n; ++y) {if (!dp[x][y]) continue;add(ans, 1ll * dp[x][y] * binomial::fac[n - y] % mod);}}std::cout << ans << '\n';return 0;
}
http://www.gsyq.cn/news/37149.html

相关文章:

  • 2025 年 11 月防静电地板厂家推荐排行榜,全钢/全钢陶瓷/硫酸钙/铝合金/pvc架空/防静电地板,OA网络地板,机房防静电地板,办公室网络架空地板公司精选
  • 2025 年 11 月真空炉厂家推荐排行榜,真空热处理炉,真空回火炉,真空退火炉,真空时效炉,气淬炉,烧结炉,铜钨合金真空焊接炉公司推荐
  • CSP NOIP 2025 游记
  • 2025 CSP 游记
  • 2025 年 11 月阿里巴巴代运营厂家推荐排行榜,1688代运营,国际站代运营,淘宝代运营,天猫代运营,店铺代运营公司精选
  • PPT 中如何使得水平线水平,垂直线垂直,不要倾斜
  • 2025 年 11 月法兰闸阀厂家推荐排行榜,美标/国标/锻钢/高压/碳钢/高温/焊接闸阀,专业制造与可靠性能口碑之选
  • 类和对象 继承project8
  • 电子丨开关电源设计规范
  • 2025 年 11 月虎头鲨/沙塘鳢/呆子鱼/虾虎鱼养殖厂家推荐排行榜,鱼苗批发,中华沙鳢,土憨巴,痴古呆子,20cm河川沙鳢价格及选购指南
  • 2025 年 11 月商标注册机构权威推荐榜:专业申请与高效服务口碑之选,商标注册公司推荐
  • 「学习笔记」PHP 函数安全
  • 2025 年 11 月虎头鲨养殖孵化基地厂家推荐排行榜,浙江省大型虎头鲨养殖,虎头鲨孵化,虎头鲨养殖基地公司推荐
  • PRML习题 第一章(正在做)
  • 《代码大全 2》观后感(四):函数设计 —— 拆解复杂问题的 “手术刀”
  • LeetCode算法模式全解:多语言实现核心数据结构与算法
  • 2025 年 11 月石墨制品厂家最新推荐,专业制造与品牌保障口碑之选
  • 3321
  • [buuctf]jarvisoj_test_your_memory
  • 正式发布!2025年11月广州心理咨询机构哪家专业?
  • Zookeeper环境搭建
  • 2025 年 11 月降膜蒸发器,结晶蒸发器,真空浓缩器厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读
  • sigmoid函数求导
  • 2025 年 11 月石灰料仓厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读
  • 2025 年 11 月石灰料仓厂家最新推荐,技术实力与市场口碑深度解析
  • Linux桌面折腾小记
  • CSP-S邮寄
  • [记于2025.7.20]
  • 软件工程团队项目一
  • 当理想触碰现实:关于“干预”与我的退缩