尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
GESP 2024年12月 武器强化 题解|枚举详细讲解
今天继续刷 GESP 2024年12月 的真题。这道枚举题属于「思路简单但细节多」的类型很多同学代码写完了却过不了问题基本都出在下面要讲的几个点上。题目来源ACGO A75444 2024年12月 五级赛事场次2024年12月 五级一、题目信息题目名称武器强化赛事场次2024年12月 五级难度定位五级涉及知识点贪心 枚举题目链接https://www.acgo.cn/problemset/info/75444先说坑点不提前知道必错枚举范围的确定如何用循环穷举全部可能。题意简述小杨有 n 种武器和 m 种强化材料。第 i 种强化材料会适配第 pᵢ 种武器小杨可以花费 cᵢ 金币将该材料对应的适配武器修改为任意武器。小杨最喜欢第 1 种武器因此他希望适配该武器的强化材料种类数严格大于其他的武器请你帮小杨计算为了满足该条件最少需要花费多少金币。前置知识下面先把需要的基础知识理一遍不熟悉的朋友可以跟着看熟悉的直接跳过。枚举的思路把所有可能的情况逐个试一遍在数据范围允许的前提下这是最稳妥的做法。关键是确定枚举的范围和顺序避免重复或漏解。二、思路分析先看清楚题目要我们做什么把题目读两遍我们提取出关键信息输入是什么、要输出什么、有哪些约束条件。这道题考查的是枚举属于这类题里比较基础的一道把题目要求一步步翻译成代码逻辑就能解决。我的思考过程读完题之后我的第一反应是这样的n 种武器、m 种材料第 i 种材料适配第 pᵢ 种武器花 cᵢ 可把该材料改配任意武器。目标是让 1 号武器的适配材料数严格大于其他每种武器。设最终 1 号材料数为 K则其他武器材料数 ≤ K-1。枚举 K1 号武器最多 m 种材料对每个 K 计算最小花费先把「材料数 ≥ K 的其它武器」所需减少的材料数强制改写优先改便宜材料仍不足 K 再从剩余材料里选最便宜的改配给 1 号武器。枚举所有 K 取最小花费。需要说明的是上面这个思路是把题目要求直译成代码得到的没有用到什么高级技巧。对于这类基础题读准题意加写对边界比追求巧妙解法更重要因为考试里这种题是必须拿满分的。三、完整代码 逐行注释#includebits/stdc.h using namespace std; #define ll long long int n, m; int cnt[1010]; vectorint cs[1010]; ll calc(int aim) { int cur_cnt cnt[1]; ll res 0; vectorint tmp; for (int i 2; in; i) { // 遍历 int buy max((int)cs[i].size() - aim 1, 0); for (int j 0; j buy; j) { // 遍历 res (ll)cs[i][j]; } cur_cnt buy; for (int j buy; j cs[i].size(); j) { // 遍历 tmp.push_back(cs[i][j]); } } sort(tmp.begin(), tmp.end()); for (int i 0; i aim - cur_cnt; i) { // 遍历 res (ll)tmp[i]; } return res; } signed main() { // freopen(06.in, r, stdin); cin n m; // 读入 for (int i 1; i m; i) { // 遍历 int p, c; cin p c; // 读入 cnt[p]; cs[p].push_back(c); } for (int i 1; i n; i) { // 遍历 sort(cs[i].begin(), cs[i].end()); } ll ans 1e18; for (int i max(cnt[1], 1); i m; i) { // 遍历 ans min(ans, calc(i)); } cout ans \n; // 输出 return 0; }四、代码分段拆解为了看得更清楚我们把代码按功能分成几段解释。第一步引入头文件#includebits/stdc.h using namespace std;#include iostream提供输入输出功能using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C 程序的开头照写即可。第二步读入数据cin n m; cin p c;注意变量的类型要能装下题目的数据。数据可能超过 21 亿时要改用long long。第三步核心处理逻辑for (int i 2; in; i) { for (int j 0; j buy; j) { for (int j buy; j cs[i].size(); j) { for (int i 0; i aim - cur_cnt; i) {这一段是整道题的关键也是枚举的体现。看循环的三个要素从哪里开始、什么时候结束、每次怎么变化。这三个要素任何一个写错结果都会不对。第四步按要求输出cout ans \n;输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA这种分丢得最可惜。五、实例模拟下面用样例数据走一遍流程你能看到每一步变量是怎么变化的。以题目的第一组样例为例样例输入4 4 1 1 2 1 3 1 3 2样例输出1把这份输入代进代码程序会先把数据依次读入然后进入循环逐个判断把满足条件的值累积起来最后按格式输出。建议你对照着代码在纸上走一遍前两次循环确认自己对每一步的理解都和程序一致。六、踩坑总结下面是做这道题时最容易出错的地方对照自己的代码检查一下变量类型选错虽然本题范围不大但养成习惯——凡是不确定范围时累加变量一律用long long成本为零但能保命。输出格式不符题目要求输出几行就输出几行行末换行、数字之间的空格都要严格对齐算法对了但格式错了同样判 WA这种分丢得最冤。特殊情况没特判把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入出题人最喜欢在这里设陷阱。七、知识点拓展最后总结一下这道题带给我们的通用经验本题考查枚举的基本写法这类题在考试中属于必得分项要练到能默写。写完代码后建议自己造几组边界数据测试特别是最小值和最大值。同一知识点在不同场次反复出现把这道题的写法吃透后面遇到同类题可以直接套用。八、适用人群刚学完枚举、正在准备 五级 考试的同学适合用这道题检验掌握程度。这道题就讲到这里。我会持续更新各场次真题的详细拆解需要系统复习的同学可以关注这个系列。有问题欢迎评论区讨论。
RELATED

相关推荐

华为CANN SHMEM:跨设备内存通信优化分布式训练

华为CANN SHMEM:跨设备内存通信优化分布式训练

1. 项目概述:跨设备内存通信在分布式训练中的核心价值在大规模深度学习模型训练场景中,单机单卡的算力早已无法满足需求。当模型参数量突破百亿级别时,多机多卡的分布式训练成为必选项。而在这个过程中,设备间的数据通信效率往往成…

📅 2026/10/26 3:49:15
名称、命名空间与符号冲突:从命名规范到工程落地

名称、命名空间与符号冲突:从命名规范到工程落地

“名称和命名空间”这六个字摆在一起,很多人第一反应是某本语言教程的章节标题,翻过去就忘了。但真正在项目里待过两三年的人会知道,这是代码库活到第二个年头必然撞上的那堵墙。我经手过的中型代码库里,超过六成的“改一处炸三处…

📅 2026/10/26 3:49:15
Kubernetes运维实战:5大核心问题解决方案

Kubernetes运维实战:5大核心问题解决方案

1. Kubernetes常见问题深度解析作为容器编排领域的事实标准,Kubernetes(简称K8s)在实际部署和维护过程中总会遇到各种"坑"。今天结合我多年在生产环境中的实战经验,梳理出五个最具代表性的问题场景及其解决方案。这些问…

📅 2026/10/26 3:44:15
MORE NEWS

更多资讯

📰

Android平台Modbus主站实现:串口通信与协议解析实战

简介:这份资源面向需要在 Android 平台上实现 Modbus 通信的开发者,尤其适合从事工业自动化设备对接、希望用手机或平板控制 PLC、温控器、变频器等硬件的工程师。项目以 Java 为主,将开源 Modbus 库 jamod 适配到 Android 环境,覆…

📰

Docker容器从概念到配置落地:镜像分层、资源限制与故障排查实战

刚接手一台别人搭好的机器,docker ps一屏幕容器名全是随机生成的形容词加科学家名字,端口映射靠翻聊天记录,日志文件把磁盘吃满,某个容器隔三差五被系统杀掉还查不出原因——这种场面我见过太多次。Docker 这玩意儿入门门槛低得离…

📰

微服务架构中的业务完整性验证设计:分层校验与对账兜底

单库单表的时候,一个BEGIN...COMMIT就能兜住的事,拆成六个服务之后,你得写两套校验、一张对账表、一个补偿任务,半夜还可能被叫起来查为什么订单是"已支付"但库存没扣。我见过太多团队在微服务拆分的第一版设计里&#…

📰

A2UI:基于大语言模型的智能UI生成技术解析

1. 项目概述:A2UI与传统UI生成模式的本质差异第一次接触A2UI这个概念是在去年的一次开发者峰会上,当时看到演示中一个完整的后台管理系统界面在30秒内从自然语言描述生成出来,着实让我这个做了十年前端的老兵震惊。A2UI(AI-Agent-…

📰

Qt自定义控件开发实战:从需求到验收的完整方案

简介:这份资源面向已掌握Qt基础、希望突破内置控件限制的开发者,聚焦自定义控件的构建思路与实现方法,可用于仪表盘、电池指示、进度条等个性化界面组件的开发实践。压缩包共32个文件,以14个cpp源文件与13个h头文件为主体&#xf…

📰

端侧语音模型选型指南:sherpa-onnx、FunASR、whisper.cpp 深度对比与实操避坑

端侧语音这块,最近一年问的人明显变多了。以前大家做语音识别,第一反应都是把音频传到云端,调用一个大模型接口,返回文字就完事。但现在情况变了:设备算力上来了,隐私要求严了,离线场景多了&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬