news 2026/4/27 14:37:03

2025信奥赛C++提高组csp-s复赛真题及题解:员工招聘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025信奥赛C++提高组csp-s复赛真题及题解:员工招聘

2025信奥赛C++提高组csp-s复赛真题及题解:员工招聘

题目描述

小 Z 和小 H 想要合伙开一家公司,共有n nn人前来应聘,编号为1 ∼ n 1 \sim n1n。小 Z 和小 H 希望录用至少m mm人。

小 H 是面试官,将在接下来n nn天每天面试一个人。小 Z 负责决定应聘人前来面试的顺序。具体地,小 Z 可以选择一个1 ∼ n 1 \sim n1n的排列p pp,然后在第i ii(1 ≤ i ≤ n 1 \leq i \leq n1in) 天通知编号为p i p_ipi的人前来面试。

小 H 准备了n nn套难度不一的面试题。由于n nn个前来应聘的人水平大致相同,因此对于同一套题,所有人的作答结果是一致的。具体地,第i ii(1 ≤ i ≤ n 1 \leq i \leq n1in) 天的面试题的难度为s i ∈ { 0 , 1 } s_i \in \{0,1\}si{0,1},其中s i = 0 s_i = 0si=0表示这套题的难度较高,没有人能够做出;s i = 1 s_i = 1si=1表示这套题的难度较低,所有人都能做出。小 H 会根据面试者的作答结果决定是否录用,即如果面试者没有做出面试题,则会拒绝,否则会录用。

然而,每个人的耐心都有一定的上限,如果在他面试之前未录用的人数过多,则他会直接放弃参加面试。具体地,编号为i ii(1 ≤ i ≤ n 1 \leq i \leq n1in) 的人的耐心上限可以用非负整数c i c_ici描述,若在他之前已经有不少于c i c_ici人被拒绝或放弃参加面试,则他也将放弃参加面试。

小 Z 想知道一共有多少种面试的顺序p pp能够让他们录用至少m mm人。你需要帮助小 Z 求出,能够录用至少m mm人的排列p pp的数量。由于答案可能较大,你只需要求出答案对998 244 353 998\,244\,353998244353取模后的结果。

输入格式

输入的第一行包含两个正整数n , m n, mn,m,分别表示前来应聘的人数和希望录用的人数。

输入的第二行包含一个长度为n nn的字符串s 1 … s n s_1 \dots s_ns1sn,表示每一天的面试题的难度。

输入的第三行包含n nn个非负整数c 1 , c 2 , … , c n c_1, c_2, \dots, c_nc1,c2,,cn,表示每个人的耐心上限。

输出格式

输出一行一个非负整数,表示能够录用至少m mm人的排列p pp的数量对998 244 353 998\,244\,353998244353取模后的结果。

输入输出样例 1
输入 1
3 2 101 1 1 2
输出 1
2
输入输出样例 2
输入 2
10 5 1101111011 6 0 4 2 1 2 5 4 3 3
输出 2
2204128
说明/提示
【样例 1 解释】

共有以下 2 种面试的顺序p pp能够让小 Z 和小 H 录用至少 2 人:

  1. p = [ 1 , 2 , 3 ] p = [1,2,3]p=[1,2,3], 依次录用编号为 1 的人和编号为 3 的人;
  2. p = [ 2 , 1 , 3 ] p = [2,1,3]p=[2,1,3], 依次录用编号为 2 的人和编号为 3 的人。
【数据范围】

对于所有测试数据,保证:

  • 1 ≤ m ≤ n ≤ 500 1 \leq m \leq n \leq 5001mn500;
  • 对于所有1 ≤ i ≤ n 1 \leq i \leq n1in,均有s i ∈ { 0 , 1 } s_i \in \{0,1\}si{0,1};
  • 对于所有1 ≤ i ≤ n 1 \leq i \leq n1in,均有0 ≤ c i ≤ n 0 \leq c_i \leq n0cin
测试点编号n ≤ n \leqnm mm特殊性质
1 , 2 1,21,210 1010≤ n \leq nn
3 ∼ 5 3 \sim 53518 1818^^
6 ∼ 8 6 \sim 86810 2 10^2102^A
9 ∼ 11 9 \sim 11911^^
12 ∼ 14 12 \sim 141214500 500500= 1 =1=1^
15 1515^= n =n=n^
16 , 17 16,1716,17^≤ n \leq nnA
18 ∼ 21 18 \sim 211821^^B
22 ∼ 25 22 \sim 252225^^

特殊性质 A: 对于所有1 ≤ i ≤ n 1 \leq i \leq n1in,均有s i = 1 s_i = 1si=1

特殊性质 B: 在s 1 , s 2 , … , s n s_1, s_2, \dots, s_ns1,s2,,sn中最多只有 18 个取值为 1,即∑ i = 1 n s i ≤ 18 \sum_{i=1}^{n} s_i \leq 18i=1nsi18

思路分析

动态规划:状态f[i][j][k]表示处理了前i天,当前阈值(被拒绝或放弃的人数)为j,且预留了k个空位(对应c值大于j的人)的方案数。通过滚动数组优化空间。

核心步骤:
  1. 预处理:统计每个c值的人数a[]和前缀和t[],计算阶乘和组合数。
  2. DP 转移
    • 根据第i+1天的面试题难度s[i+1]分两种情况。
    • 每种情况又根据是否放置c<=j的人、处理预留空位等细分。
    • 转移时通过组合数计算选择方案,并乘以阶乘考虑顺序。
  3. 统计答案:对于最终阈值j(满足录用人数n-j >= m),取预留空位数k = n - t[j],将f[n][j][k]乘以k!(剩余c>j的人任意排列)累加到答案。
复杂度:
  • 时间:O(n^3),但常数较小,n=500可过。
  • 空间:O(n^2),使用滚动数组。

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=510;constintMOD=998244353;intn,m;chars[N];intc[N];inta[N],t[N];// a[i]: c值为i的人数,t[i]: c值<=i的人数longlongf[N][N];// 滚动数组,f[j][k] 表示当前处理了前i天,阈值为j,预留空位klonglongg[N][N];// 下一层状态longlongC[N][N];// 组合数longlongfact[N];// 阶乘intmain(){scanf("%d%d",&n,&m);scanf("%s",s+1);// s[1..n]for(inti=1;i<=n;++i){scanf("%d",&c[i]);++a[c[i]];}// 预处理 t[]t[0]=a[0];for(inti=1;i<=n;++i){t[i]=t[i-1]+a[i];}// 预处理阶乘和组合数fact[0]=1;for(inti=1;i<=n;++i){fact[i]=fact[i-1]*i%MOD;}for(inti=0;i<=n;++i){C[i][0]=C[i][i]=1;for(intj=1;j<i;++j){C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD;}}// 初始化f[0][0]=1;for(inti=0;i<n;++i){// 清空 gfor(intj=0;j<=n;++j){for(intk=0;k<=n;++k){g[j][k]=0;}}// 枚举当前状态 f[j][k]for(intj=0;j<=i;++j){for(intk=0;k<=n;++k){longlongcur=f[j][k];if(cur==0)continue;if(s[i+1]=='1'){// 转移1:预留一个空位(放一个 c>j 的人,延后处理)g[j][k+1]=(g[j][k+1]+cur)%MOD;// 转移2:放一个 c<=j 的人,同时处理 l 个 c=j+1 的空位intA=a[j+1];intt_j=t[j];for(intl=0;l<=min(k,A);++l){longlongcomb=C[k][l]*C[A][l]%MOD*fact[l]%MOD;longlongval=cur*(t_j-i+k)%MOD*comb%MOD;g[j+1][k-l]=(g[j+1][k-l]+val)%MOD;}}else{// s[i+1] == '0'intA=a[j+1];intt_j1=t[j+1];for(intl=0;l<=min(k,A);++l){longlongcomb=C[k][l]*C[A][l]%MOD*fact[l]%MOD;// 转移A:放一个 c<=j+1 的人,同时处理 l 个空位longlongval1=cur*(t_j1-i+k-l)%MOD*comb%MOD;g[j+1][k-l]=(g[j+1][k-l]+val1)%MOD;// 转移B:钦定一个新的空位longlongval2=cur*comb%MOD;g[j+1][k-l+1]=(g[j+1][k-l+1]+val2)%MOD;}}}}// 滚动数组swap(f,g);}longlongans=0;for(intj=0;j<=n-m;++j){intk=n-t[j];if(k>=0&&k<=n){ans=(ans+f[j][k]*fact[k])%MOD;}}printf("%lld\n",ans);return0;}

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 7:39:37

OneNote效率工具:5大场景+10个实战技巧让笔记管理效率倍增

OneNote效率工具&#xff1a;5大场景10个实战技巧让笔记管理效率倍增 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 价值认知&#xff1a;为什么OneMore能重新定义你…

作者头像 李华
网站建设 2026/4/26 19:46:58

5步搞定:用ChatGLM3-6B-128K搭建智能客服系统

5步搞定&#xff1a;用ChatGLM3-6B-128K搭建智能客服系统 你是不是也遇到过这些问题&#xff1a;客服响应慢、重复问题反复问、夜间无人值守、培训成本高&#xff1f;别急&#xff0c;现在用一个开源模型就能解决——ChatGLM3-6B-128K。它不是概念演示&#xff0c;而是真正能跑…

作者头像 李华
网站建设 2026/4/23 13:19:21

DamoFD多场景实战案例:直播审核、证件照质检、虚拟形象驱动技术解析

DamoFD多场景实战案例&#xff1a;直播审核、证件照质检、虚拟形象驱动技术解析 人脸检测与关键点定位是计算机视觉中最基础也最核心的能力之一。但真正让这项技术“活起来”的&#xff0c;从来不是参数指标&#xff0c;而是它在真实业务中解决实际问题的能力。DamoFD作为达摩…

作者头像 李华
网站建设 2026/4/26 19:05:02

Qwen3-32B开源大模型落地Clawdbot:镜像免配置+Web界面快速启用教程

Qwen3-32B开源大模型落地Clawdbot&#xff1a;镜像免配置Web界面快速启用教程 你是不是也遇到过这样的问题&#xff1a;想用最新发布的Qwen3-32B大模型&#xff0c;但光是部署就卡在环境依赖、CUDA版本、模型加载失败、API服务启动报错这些环节上&#xff1f;更别说还要自己搭…

作者头像 李华
网站建设 2026/4/23 11:40:20

DeerFlow显存优化技巧:vLLM部署时的资源节省方案

DeerFlow显存优化技巧&#xff1a;vLLM部署时的资源节省方案 1. DeerFlow是什么&#xff1a;不只是一个研究助手 DeerFlow不是传统意义上的聊天机器人&#xff0c;而是一个能真正“动手做事”的深度研究伙伴。它不满足于简单回答问题&#xff0c;而是主动调用搜索引擎查资料、…

作者头像 李华