第九届河北省大学生程序设计竞赛补题
H题题解简单题按照题目意思判断字符串末尾是否为isallyouneed是的话输出Yes并且打印前半部分不是输出No。代码#includeiostream using namespace std; int main() { string s; cin s; int n s.size(); string t isallyouneed; for (int i n - 12,cnt0; i n; i,cnt) { if (s[i] ! t[cnt]) { cout No; return 0; } } cout Yes\n; for (int i 0; i n - 12; i) { cout s[i]; } return 0; }K题题解根据题目意思n个人坐在一个牌桌上从一号玩家开始每个人依次出牌牌分为四种牌普通牌 没效果禁止牌跳过下家反转牌将出牌顺序进行反转罚抽两张牌下家牌数2并跳过。如果一位玩家手里的牌出完就算出局我们知道出牌的结果让求每个人最后剩下几张牌。思路按照题目意思进行模拟一开始想的是通过取模成环用一个数组记录每个人剩余的牌数用一个变量标记当前的出牌的顺序对于已经出局的人(牌数为0)我们会不断的移动但是由于出局人数始终重复被计算会导致超时。优化使用双向循环链表记录当前牌桌上的人对于当前牌数为0的玩家直接删除该节点不会重复的计算已经出局玩家。写法list自带的STL容器实现双向循环链表每个a[cur]--多需要判断是否为0如果该点为0执行删除节点逻辑保存该点it移动删除该点代码#include iostream #includevector #includelist using namespace std; #define cur *it int n, m; void move(listint::iterator it,listintmyList,int r) { if (r 1) { if (it myList.begin()) { it myList.end(); --it; } else { --it; } } else { if (it myList.end()) { it myList.begin(); } } } int main() { cin n m; vectorint a(n1, 0); for (int i 1; i n; i) cin a[i]; listintlst; for (int i 1; i n; i)lst.push_back(i); auto it lst.begin(); int r 0; listint::iterator tmp lst.begin(); for (int i 0; i m; i) { char op; cin op; if (op C) { if (--a[cur] 0) { tmp it; move(it, lst, r); lst.erase(tmp); } else { move(it, lst, r); } } else if (op S) { if (--a[cur] 0) { tmp it; move(it, lst, r); lst.erase(tmp); } else { move(it, lst, r); } move(it, lst, r); } else if (op R) { r ^ 1; if (--a[cur] 0) { tmp it; move(it, lst, r); lst.erase(tmp); } else { move(it, lst, r); } } else if (op D) { if (--a[cur] 0) { tmp it; move(it, lst, r); lst.erase(tmp); } else { move(it, lst, r); } a[cur] 2; move(it, lst, r); } } for (int i 1; i n; i) { cout a[i] \n; } return 0; }M题题解m个队伍做n道题之后给你一个二维矩阵表示做题情况a[i][j]表示第i个队伍是否通过第j道题0表示不通过1表示通过之后告诉你金银铜的最后一名又告诉你金银铜的最后一名的过题数目让你从这n道题中选出10-13道题让他满足给的排名还有过题数目。思路由于本题n和m的范围很小我选择回溯的方式暴力枚举所有情况对于每一道题就是选和不选最后检查是否方案是否合法状态枚举到第cur道题目已选题数num(辅助状态用于剪枝)状态转移第i道题选与不选终止状态num满足10-13满足check函数。剪枝当前选择题目数量未选数量10或者已选数量13进行剪枝check函数通过回溯我们得到了已选题目我们判断已选题目是否符合题目所说的我们统计每个队伍已选题目它通过的数量之后对其由大到小排序我们检查金银铜最后一名的过题数目是否等于他给的过题数目#includeiostream #includevector #includealgorithm using namespace std; const int N 210; int n, m; int rkg, rks, rkb; int pg, ps, pb; vectorstringscore(N); vectorintselected; bool check() { //统计每个队伍的过题数目并排序之后校验对应位值是否等于规定值 vectorintpassed; for (int i 1; i m; i) { int cnt 0; for (auto x : selected) { if (score[i][x - 1] 1) { cnt; } } passed.push_back(cnt); } sort(passed.begin(), passed.end(), greaterint()); if (pg passed[rkg - 1] ps passed[rks - 1] pb passed[rkb - 1]) { return true; } return false; } //cur:当前枚举的题目编号num已选题目数量 bool dfs(int cur, int num) { //目标状态选择的题目10~13,并且检查通过 if ( num 10 num 13 check()) { return true; } if (cur n) { return false; } //剪枝 if (num (n - cur 1) 10 || num 13)return false; //不选当前题目 if (dfs(cur 1, num)) return true; //选当前题目 selected.push_back(cur); if (dfs(cur 1, num 1))return true; selected.pop_back(); return false; } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin n m; for (int i 1; i m; i) { cin score[i]; } cin rkg rks rkb; cin pg ps pb; if (dfs(1, 0)) { cout selected.size() \n; for (auto x : selected) { cout x ; } } else { cout -1; } return 0; }J题题解本题与括号匹配问题有异曲同工之妙初始有个标识符S可以进行两种操作 1 将第pos 个标识符S变成0S1S。 2 将第pos 个标识符S变成1S0S。 最终所有的标识符消失只保留字符串中的01字符。 现在给出01串T问能否生成。思路我们还是像括号匹配问题一样用栈去模拟只有01个数相等才能匹配成功所以我们可以先判断01个数是否相等之后0/1的个数就是操作数他和括号匹配问题不同的就是01能匹配10也能匹配从左向右遍历如果栈为空或者当前元素与栈顶元素相同那么他们都是匹配区间的左端点并且我们根据左端点是0就是1操作0S1S左端点是1就是2操作1S0S并且连续的左端点使用的都是同一个pos否则就是产生了一个01配对或者10配对那么就弹出栈顶元素此时pos需要1.代码#includebits/stdc.h using namespace std; int main() { stackintstk; string s; cin s; int num1 count(s.begin(), s.end(), 1); int num0 count(s.begin(), s.end(), 0); if (num1 ! num0) { cout -1 \n; return 0; } cout num0 \n; int pos 1; for (int i 0; i s.size(); i) { if (stk.empty() || stk.top() s[i]) { stk.push(s[i]); cout pos s[i] - 01 \n; } else { stk.pop(); pos; } } return 0; }D题题解一开始我就局限于数对个数与答案(差值的总和)之间的单调性关系实际上这道题的单调性关系是数对个数和差值之间的单调性关系即更大的差值允许出现更多的数对我们通过二分求得差值的最小值能够使数对个数满足k,一开始使用双指针就是漏求了一些实际上应该是先求所有小于ans的差值的总和(个数可能大于k个)之后再把多余的减去差值最大为ans说明前k个中一定有一个ans否则(反证如果前k个差值ans,那么差值的最小值能够使数对个数k就不是ans了)所以[k1,.....cnt]也就是多出来的一定是ans我们只需要用cnt-k*ans就是多出来的值再用总和一减就行,所有差值小于ans数对的差值的总和的求法还是再双指针过程求解对于当前的r来说a[r],能够与(a[l],a[l1],...a[r-1])构成的数对都满足条件所以就是(a[r]-a[l])(a[r]-a[l1])....(a[r]-a[r-1])也就是(r-1-l1)*a[r]-求和(l,....r-1),之后这个求和可以使用前缀和。代码#includeiostream #includevector #includealgorithm #define int long long using namespace std; int n, k; bool check(int mid, vectorint a) { int l 0, r 0; int cnt 0; for (; l n; l) { //右指针向右移动找到第一个不满足条件的 while (rna[r] - a[l] mid) { r; } //l1~r-1是满足条件的右端点 cnt (r - 1) - (l 1) 1; } return cnt k; } signed main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin n k; vectorinta(n); for (auto x : a)cin x; sort(a.begin(), a.end()); int l 0; int r a[n - 1] - a[0]; int ans 0; while (l r) { int mid (l r) / 2; if (check(mid,a)) { r mid - 1; ans mid; } else { l mid 1; } } vectorintpre(n 1, 0); for (int i 1; i n; i) { pre[i] pre[i - 1] a[i - 1]; } //现在已知最小的mid了我们只需要根据此求答案就行了 int l1 0, r1 0; int res 0; int sum 0; int cnt0; for (; l1 n; l1) { //右指针向右移动找到第一个不满足条件的 while (r1 n a[r1] - a[l1] ans) { if (r1 ! l1) { sum - pre[r1] - pre[l1]; sum (r1 - l1) * a[r1]; } r1; } //l1~r-1是满足条件的右端点 cnt (r1- 1) - (l1 1) 1; } res sum - (cnt - k) * ans; cout res; return 0; }

相关新闻

新手友好!CAM++语音验证系统5分钟快速搭建指南

新手友好!CAM++语音验证系统5分钟快速搭建指南

新手友好!CAM语音验证系统5分钟快速搭建指南 1. 为什么你需要这个系统? 你有没有遇到过这些场景: 想快速确认一段录音是不是某个人说的,但找不到趁手工具做声纹考勤系统时,反复调试模型环境耗掉一整天看到别人演示“…

2026/7/6 6:13:03 阅读更多 →
高级机器学习核心算法解析:从PCA到Q-Learning的实战应用

高级机器学习核心算法解析:从PCA到Q-Learning的实战应用

1. PCA降维实战:从数学原理到特征脸应用 主成分分析(PCA)是机器学习中最常用的降维技术之一。我第一次接触PCA是在处理一个人脸识别项目时,当时数据集中的每张图片都有1024个像素特征,直接处理计算量巨大。通过PCA,我们成功将维度…

2026/7/4 23:12:39 阅读更多 →
GPEN镜像实战:零基础搭建人像修复增强应用

GPEN镜像实战:零基础搭建人像修复增强应用

GPEN镜像实战:零基础搭建人像修复增强应用 你有没有遇到过这样的情况:翻出一张泛黄的老照片,人脸模糊、细节丢失,想修复却不知从何下手;或者拍了一张逆光人像,皮肤噪点多、轮廓发虚,修图软件调…

2026/7/5 15:41:08 阅读更多 →

最新新闻

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…

2026/7/6 6:20:52 阅读更多 →
如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南

如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南

如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南 【免费下载链接】FGA Auto-battle app for F/GO Android 项目地址: https://gitcode.com/gh_mirrors/fg/FGA Fate/Grand Automata(FGA)是一款专为《Fate/Grand Order》玩家…

2026/7/6 6:18:51 阅读更多 →
绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判

绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判

绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判摘要:本文以“绝对真理”(如算术基本事实“112”)为锚点,系统检视当代西方学术主流中两类“软科学”现象:一类是形式主义公理化…

2026/7/6 6:16:50 阅读更多 →
AI商业洞察动态简报(2026.07.05)

AI商业洞察动态简报(2026.07.05)

第1条:快手可灵AI完成30亿美元融资,估值达150亿美元商业价值:可灵AI成立于2023年,是快手旗下的AI视频生成模型业务。本轮融资创下全球视频大模型公司最大额融资纪录,投资者涵盖产业资本(腾讯、阿里云、百度…

2026/7/6 6:16:50 阅读更多 →
吾爱大佬出品,可离线的识别工具!一键提取图片文字、图片表格、PDF文字!

吾爱大佬出品,可离线的识别工具!一键提取图片文字、图片表格、PDF文字!

软件获取 OCR识别软件 使用提示: 1、 打开软件后,点击"截图识别"即可框选识别区域。 2、点击"导入文件"可以选择图片或 PDF。 3、"设置"里可以设置保存目录、自动复制、自动保存、HTTP服务、自定义API 等。 4、"…

2026/7/6 6:14:50 阅读更多 →
鸿蒙新特性:CalendarPicker 日历组件详解——构建一个日程管理应用

鸿蒙新特性:CalendarPicker 日历组件详解——构建一个日程管理应用

日历是时间管理类应用中最高频的交互界面之一。HarmonyOS NEXT ArkUI 提供了 CalendarPicker 组件,以月视图网格的方式展示完整日历,支持年份月份滑动切换、日期选中高亮和自定义日期范围。配合事件数据,可以轻松构建日程管理、酒店预订、排班…

2026/7/6 6:14:50 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻