跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

CCF-GESP 2025 年 12 月四级 C++ 真题:优先购买

解析 CCF-GESP 四级 C++ 真题“优先购买”。题目要求在预算限制下,根据优先级(数值越小越高)、价格(越低越好)和名称字典序(越小越好)三个规则选择商品。解题采用结构体封装数据,自定义排序函数实现三级排序,遍历购买并记录,最后对结果按字典序输出。代码使用 C++ STL 容器及标准库函数完成逻辑实现。

MqEngine发布于 2026/3/29更新于 2026/5/2427 浏览

GESP 四级 C++ 题目:优先购买

题目描述

小 A 有 M 元预算。商店有 N 个商品,每个商品有商品名 S、价格 P 和优先级 V 三种属性,其中 V 为正整数,且 V 越小代表商品的优先级越高。

小 A 的购物策略为:

  • 总是优先买优先级最高的东西;
  • 如果有多个最高优先级商品,购买价格最低的;
  • 如果有多个优先级最高且价格最低的商品,购买商品名字典序最小的。

小 A 想知道能购买哪些商品。

输入格式

第一行两个正整数 M, N,代表预算和商品数。

之后 N 行,每行一个商品,依次为 Si Pi Vi,代表第 i 个商品的商品名、价格、优先级。

数据保证不存在两个名字相同的商品。

输出格式

按照字典序从小到大的顺序,输出所有购买商品的商品名。

输入输出样例 #1

输入 #1
20 4 apple 6 8 bus 15 1 cab 1 10 water 4 8 
输出 #1
bus cab water 

说明/提示

数据范围

对于所有测试点,保证 1≤|Si|≤10,1≤M,Pi≤10^5,1≤N≤10^3,1≤Vi≤10。商品名仅由小写字母组成且不存在两个相同的商品名。

解题思路

解题核心思路为'先按规则排序商品,再按优先级依次购买,最后整理输出结果',整体分为三个关键步骤:

  1. 数据封装:使用结构体统一存储每个商品的名称、价格、优先级,方便后续排序和遍历;
  2. 自定义排序:严格遵循题目要求的三层优先级(优先级 v→价格 p→名字典序),对所有商品进行排序,确保靠前的商品是当前最该购买的;
  3. 模拟购买与结果整理:遍历排序后的商品,预算足够则购买并记录商品名,最后将购买列表按字典序排序后输出,满足题目输出要求。
#include<bits/stdc++.h>
using namespace std;
int m, n;
struct node {
    string s;
    int p;
    int v;
};
node a[1005];
vector<string> name;

bool cmp(node x, node y) {
    if (x.v != y.v) return x.v < y.v;
    if (x.p != y.p) return x.p < y.p;
    return x.s < y.s;
}

int main() {
    cin >> m >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].s >> a[i].p >> a[i].v;
    }
    sort(a + 1, a + n + 1, cmp);
    for (int i = 1; i <= n; i++) {
        if (a[i].p <= m) {
            name.push_back(a[i].s);
            m -= a[i].p;
        }
    }
    sort(name.begin(), name.end());
    for (int i = 0; i < name.size(); i++) {
        cout << name[i] << "\n";
    }
    return 0;
}

代码分步解析

  1. 数据结构定义
    • 使用 struct node 封装了商品的三个属性,避免零散变量管理的混乱;
    • 结构体数组 a[1005] 用于存储所有商品,vector<string> name 用于动态记录购买的商品名,灵活且方便后续排序。
  2. 自定义排序函数(核心)
    这是实现题目购买策略的关键,按题目要求分层定义排序规则:
    • 第一层:优先级 v 从小到大,保证优先购买优先级最高的商品;
    • 第二层:价格 p 从小到大,保证优先级相同时购买最低价商品;
    • 第三层:商品名字典序从小到大,保证前两个条件相同时购买字典序最小的商品。
  3. 主函数逻辑
    • 输入数据:先读取预算 m 和商品数 n,再循环读取每个商品的信息存入结构体数组;
    • 商品排序:使用 C++ 标准库 sort 函数,结合自定义 cmp 函数,完成商品优先级排序;
    • 模拟购买:遍历排序后的商品,判断预算是否足够,足够则购买并更新预算,同时记录商品名;
    • 结果整理与输出:由于题目要求输出按字典序排列,因此先对购买列表排序,再逐行输出。

目录

  1. GESP 四级 C++ 题目:优先购买
  2. 题目描述
  3. 输入格式
  4. 输出格式
  5. 输入输出样例 #1
  6. 输入 #1
  7. 输出 #1
  8. 说明/提示
  9. 数据范围
  10. 解题思路
  11. 代码分步解析
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Qwen-Image-2512 技术亮点解析与 ComfyUI 部署实战
  • 文本生成技术原理、应用与国产工具实践指南
  • Llama-3.2-3B 部署优化:Ollama 配置上下文窗口与 Token 限制
  • 自然语言处理高级应用与前沿技术实战
  • Claude Code 安装指南:终端 AI 编程助手配置与使用
  • ELF Hash 算法原理及 C++ 实现解析
  • MS-S1 MAX 与 AI MAX 395 在 Ubuntu 24 使用 Vulkan 版 llama.cpp 运行 gpt-oss 120b
  • JavaSE 网络协议:HTTP 请求与响应解析
  • AI 赋能数据库运维:金仓 KES 的智能化未来
  • FAIR plus 机器人全产业链接会:聚焦全产业链技术与创新
  • stable-diffusion-webui 照片艺术化风格迁移指南
  • 前端内存泄露检测与排查指南
  • iTerm2 Snazzy 主题安装与自定义色彩指南
  • Effective C++ 条款 34:区分接口继承与实现继承
  • Git 版本控制基本操作
  • 告别代码,迎接代理:Claude Code 等六大 AI 工具解析
  • CarelessWhisper: 将 Whisper 转变为因果流式模型
  • 字节跳动前端社招面试经验总结
  • 大语言模型基础与前沿:从 Devin 看 LLM 技术发展与未来趋势
  • 大语言模型训练指南:架构、微调与超参数详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online