每日一题——提取服务器物料型号并统计出现次数
提取服务器物料型号并统计出现次数
- 一、题目描述
- 💡 输入描述:
- 📤 输出描述:
- 二、样例示例
- 🎯 示例1
- 🎯 示例2
- 三、解题思路
- 1. 子串提取策略:正则匹配
- 2. 统计策略:哈希映射
- 3. 输出策略
- 四、复杂度分析
- 五、C++ 代码实现(含详细注释)
- 六、总结与拓展
在企业IT运维或报废资产管理中,分析各台服务器上的CPU、内存、主板型号,并统计可回收配件的数量,是一个典型的文本处理与统计问题。
本题模拟了这样的场景,给定每台服务器的物料编码字符串,我们要从中提取出每类备件的首个型号标识,统计所有服务器上每种型号的数量,并按字典序输出。
一、题目描述
💡 输入描述:
- 第一行为一个整数 $N$,表示服务器的数量,$1 \leq N \leq 1000$;
- 第二行为 $N$ 个物料编码字符串,使用空格隔开。每个字符串长度不超过 $100$,包含字母和数字。
每个字符串中包含若干段代表配件型号的子串:
- CPU 型号格式为:
C
+ 两位数字,例如:C01
; - 内存型号格式为:
M
+ 两位数字,例如:M23
; - 主板型号格式为:
B
+ 两位数字,例如:B05
。
注意:每类备件的型号可能出现多次,但我们只取第一次出现的。
📤 输出描述:
共三行输出,每行对应一类配件的型号统计:
- 第一行为 CPU 型号;
- 第二行为内存型号;
- 第三行为主板型号。
格式要求如下:
- 每个型号及其数量用
型号,数量
表示; - 多个型号之间用英文分号
;
分隔; - 相同类的型号需按照字典序升序排序。
二、样例示例
🎯 示例1
输入:
2
C01M23B050130 C01M23B060130
输出:
C01,2
M23,2
B05,1;B06,1
🎯 示例2
输入:
3
C0CM23B05C130X11 C01M23B050130Y22 C01M24B05C130Z33
输出:
C01,2;C13,1
M23,2;M24,1
B05,3
三、解题思路
1. 子串提取策略:正则匹配
-
使用正则表达式提取第一个匹配的型号子串:
- CPU:
C\d{2}
- 内存:
M\d{2}
- 主板:
B\d{2}
- CPU:
-
使用
regex_search
获取首次出现的对应子串。
2. 统计策略:哈希映射
- 使用
map<string, int>
记录每类备件的型号及其出现次数。
3. 输出策略
- 对每类 map 的 key 进行字典序排序(
map
本身已按字典序),格式化输出。
四、复杂度分析
-
时间复杂度:
- 每个字符串长度为 $L$,查找3类型号 $O(L)$,总共 $N$ 个字符串,故为 $O(NL)$;
- 每类 map 的排序为 $O(K\log K)$,其中 $K$ 为不同型号数量,通常远小于 $NL$。
- 总体为:$O(NL + K\log K)$。
-
空间复杂度:
- 输入为 $O(NL)$;
- 三个 map 的空间为 $O(K)$。
五、C++ 代码实现(含详细注释)
#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false); // 提高 cin/cout 效率cin.tie(nullptr); // 禁止 cin 与 stdout 同步,提高性能int n;cin >> n; // 输入服务器数量vector<string> codes(n); // 用于存储每台服务器的物料编码for (int i = 0; i < n; i++) {cin >> codes[i]; // 读入每个编码字符串}// 三个 map 分别统计 CPU、内存、主板的型号及其数量map<string, int> cpuMap, memMap, boaMap;// 三个正则表达式模式(匹配格式:字母 + 两位数字)regex rc("C\\d{2}"); // 匹配 C01、C13 等regex rm("M\\d{2}"); // 匹配 M23 等regex rb("B\\d{2}"); // 匹配 B05、B06 等for (auto &s : codes) {smatch m;// 查找 CPU 型号string cpu = "";if (regex_search(s, m, rc)) cpu = m.str(0);// 查找内存型号string mem = "";if (regex_search(s, m, rm)) mem = m.str(0);// 查找主板型号string boa = "";if (regex_search(s, m, rb)) boa = m.str(0);// 更新三个 map 中的数量统计if (!cpu.empty()) cpuMap[cpu]++;if (!mem.empty()) memMap[mem]++;if (!boa.empty()) boaMap[boa]++;}// 输出函数:按格式输出 map 内容auto printMap = [](const map<string,int>& M) {bool first = true;for (auto &p : M) {if (!first) cout << ";"; // 多个型号之间加分号cout << p.first << "," << p.second; // 型号,数量first = false;}cout << "\n";};// 依次输出 CPU、内存、主板型号统计printMap(cpuMap);printMap(memMap);printMap(boaMap);return 0;
}
六、总结与拓展
本题考查了:
- 字符串匹配与提取:使用正则表达式高效提取指定格式子串;
- 哈希统计与排序输出:结合
map
和格式控制完成需求; - 数据结构选型与性能控制:合理利用 STL 的特性简化实现;
适合作为 C++ 基础练习题,也可以拓展到更复杂的日志解析或配置提取任务中。
相关文章:
每日一题——提取服务器物料型号并统计出现次数
提取服务器物料型号并统计出现次数 一、题目描述💡 输入描述:📤 输出描述: 二、样例示例🎯 示例1🎯 示例2 三、解题思路1. 子串提取策略:正则匹配2. 统计策略:哈希映射3. 输出策略 四…...

宫格导航--纯血鸿蒙组件库AUI
摘要: 宫格导航(A_GirdNav):可设置导航数据,建议导航项超过16个,可设置“更多”图标指向的页面路由。最多显示两行,手机每行最多显示4个图标,折叠屏每行最多6个图标,平板每行最多8个图标。多余图…...

RNN 循环神经网络:原理与应用
一、RNN 的诞生背景 传统神经网络(如 MLP、CNN)在处理独立输入时表现出色,但现实世界中存在大量具有时序依赖的序列数据: 自然语言:"我喜欢吃苹果" 中,"苹果" 的语义依赖于前文 "…...
React---day2
2、jsx核心语法 2.1 class 和java很像啊 <script>// 定义一个对象class Person {//构造函数constructor(name , age){this.name name;this.age age;}// 定义一个方法sayHello(){console.log(hello ${this.name});}}// 创建一个对象Person1 new Person(张三 , 18);//…...

若依框架 账户管理 用户分配界面解读
下载下来若依网站后 先对 后端代码进行解读 首先项目架构: 一般用 admin 这个比较多进行二次开发 其他 rouyi-common,rouyi-framework:为公共部分 rouyi-generator:代码生成部分 ruoyi-quartz:定时任务 ruoyi-system:系统任务 …...

文档贡献 | 技术文档贡献流程及注意事项(保姆级教程)
内容目录 一、注册流程 二、创建分支(Fork) 三、使用GitLab界面更新文件的MR流程 四、使用Git命令行工具更新文件的MR流程 五、注意事项 一、注册流程 1、注册页面 在长安链平台注册页面,输入手机号码 ,点击 “获取验证码”…...

open-vscode-server +nodejs 安装
GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/gh_mirrors/op/openvscode-server/?utm_sourceartical_gitcode&ind…...

知行之桥如何将消息推送到钉钉群?
在钉钉平台中,机器人主要分为企业机器人和自定义机器人两类。本文将重点介绍如何通过自定义机器人,实现将知行之桥 EDI 系统的通知消息高效推送至钉钉群,帮助企业第一时间掌握业务动态。 一、在钉钉群中添加自定义机器人 在需要接收知行之桥…...

09《从依赖管理到容器化部署:Maven 全链路实战笔记,解锁 Java 项目自动化构建的终极奥秘》
目录 一、Maven 核心基础强化 (一)Maven 架构与工作原理 1. 核心组件解析 2. 工作流程图示编辑 (二)项目结构深度实践 1. 标准目录扩展说明 2. 多模块项目典型结构示例编辑 二、依赖管理高级进阶 (一&…...

<el-date-picker>组件传参时,选中时间和传参偏差8小时
遇到一个bug,不仔细看,都不一定能发现,bug描述:我们有一个搜索框,里面有一个时间选择器,当我使用<el-date-picker>时,我发现当我选择时分秒之后,显示都正常,但是当…...

ST MCU CAN模块--TTCAN模式浅析
ST MCU CAN模块使用总结 1 前言 传统CAN 采用事件触发消息传输机制,CSMA/ CD AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时…...
MySQL数据库零基础入门教程:从安装配置到数据查询全掌握【MySQL系列】
第1章:认识MySQL 1.1 什么是MySQL? MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现由Oracle公司维护。它使用结构化查询语言(SQL)进行数据库的管理和操…...
动态规划(7):背包问题
引言 背包问题是动态规划中最经典、最重要的问题类型之一,它不仅在算法竞赛中频繁出现,也在实际应用中有着广泛的用途。从资源分配到投资组合优化,从生产计划到网络路由,背包问题的思想几乎无处不在。正因如此,背包问题被誉为动态规划的"必修课",掌握背包问题…...

谷歌浏览器Google Chrome v137.0.7151.41 中文版本版+插件 v1.11.1
一、软件介绍 这个版本解压就可以用,界面是中文的。 保留了核心功能, 二、软件特点 便携性 :解压即可使用,不想用了直接删掉整个文件夹。 增强功能 :通过Chrome增强软件劫持补丁chromev1.11.1 x64 (version.dll)实现多…...
《深入解析UART协议及其硬件实现》-- 第三篇:UART ASIC实现优化与低功耗设计
第三篇:UART ASIC实现优化与低功耗设计 1. ASIC与FPGA设计差异 1.1 标准单元库选型 库类型对设计的影响 : 高性能库(High-Speed) :使用低阈值电压晶体管,速度快但漏电功耗高,适合关键路径优化…...
Hadoop常用端口号和配置文件
常用端口号有: hadoop2.x Hadoop3.x 访问HDFS端口 50070 9870 访问MR执行情况端口 8088 8088 历史服务器 19888 19888 客户端访问集群端口 9000 8020 常用配置文件 hadoop2.x core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-si…...
Apache Paimon:存储结构、写入及其源码分析
Apache Paimon (此前称为 Flink Table Store)是一种流式数据湖存储技术,采用 LSM(Log-Structured Merge-tree)树结构来存储数据,支持高吞吐、低延迟的数据摄入和实时查询,尤其适用于流式和批量统一的场景。 1. 创建表…...
19、Python字符串高阶实战:转义字符深度解析、高效拼接与输入处理技巧
适合人群:零基础自学者 | 编程小白快速入门 阅读时长:约6分钟 文章目录 一、问题:Python的转义字符?1、例子1:快递地址格式化打印2、答案:(1)转义字符 二、问题:Python的…...

国芯思辰| 同步降压转换器CN2020应用于智能电视,替换LMR33620
在智能电视不断向高画质、多功能、智能化发展的当下,其内部电源管理系统的性能至关重要。同步降压转换器可以为智能电视提供稳定、高效的运行。 国芯思辰CN2020是一款脉宽调制式同步降压转换器。内部集成两个功率MOS管,在4.5~18V宽输入电压范围内可以持…...
6个月Python学习计划 Day 8 - Python 函数基础
第一周 Day 1 - Python 基础入门 & 开发环境搭建 Day 2 - 条件判断、用户输入、格式化输出 Day 3 - 循环语句 range 函数 Day 4 - 列表 & 元组基础 Day 5 - 字典(dict)与集合(set) Day 6 - 综合实战:学生信息…...

DeepSeek 提示词大全
目录 前言一、提示词基础理论 什么是提示词提示词的类型提示词的基本结构 二、提示词设计原则 明确指令结构化表达情境化需求渐进式引导边界与限制 三、场景化提示词模板 写作创作类角色扮演类信息提取类代码编程类教育学习类商业营销类生活助手类 四、提示词优化技巧 迭代式优…...

俄罗斯无人机自主任务规划!UAV-CodeAgents:基于多智能体ReAct和视觉语言推理的可扩展无人机任务规划
作者:Oleg Sautenkov 1 ^{1} 1, Yasheerah Yaqoot 1 ^{1} 1, Muhammad Ahsan Mustafa 1 ^{1} 1, Faryal Batool 1 ^{1} 1, Jeffrin Sam 1 ^{1} 1, Artem Lykov 1 ^{1} 1, Chih-Yung Wen 2 ^{2} 2, and Dzmitry Tsetserukou 1 ^{1} 1单位: 1 ^{1} 1斯科尔…...

结构性设计模式之Bridge(桥接)
结构性设计模式之Bridge(桥接) 摘要 桥接模式是一种结构性设计模式,其核心思想是将抽象部分与实现部分分离,使二者能够独立变化。本文通过汽车产品生产案例(产品A/B与颜色红/蓝/黄)展示了桥接模式的应用&…...
CSS篇-1
1. CSS 有哪些基本选择器?它们的权重是如何表示的? 这是一个关于 CSS 基础且极其重要的问题,因为它直接关系到我们如何精准地控制页面元素的样式,以及在样式冲突时浏览器如何决定哪个样式生效。理解 CSS 选择器及其权重ÿ…...

Android 16系统源码_无障碍辅助(一)认识无障碍服务
前言 Android 的无障碍辅助功能(Accessibility)是一套专为残障用户或特殊场景设计的核心技术框架,旨在让所有用户都能便捷地操作设备。其功能覆盖视觉、听觉、运动能力和认知障碍支持,同时为开发者提供标准化 API 以实现应用适配…...

分布式数据库备份实践
在分布式备份中可以采取两种方式进行备份,一种是采用手动编写backup.yml文件进行备份,另外一种是吧备份过程交给备份工具自动执行。如果需要个性化进行备份,建议采用手动编写备份文件方式进行备份。 以下是针对两种备份方式的实践:…...

如何发布npm包?
如何发布npm包? 1. 注册账号[npm官网](https://www.npmjs.com/)2. 检查 npm 源是否在官方 npm 仓库,如果不在,进行切换3. 检查4. 打包配置5. 发布6. 使用错误:版本更新命令 1. 注册账号npm官网 2. 检查 npm 源是否在官方 npm 仓库…...
鸿蒙---使用真机模拟器的时候,图片不加载问题
使用真机模拟器的时候,图片不加载问题 解决方案: 1,找到 module.json5 文件,路径 entry -> src -> main -> module.json5 2,在module.json5 文件中,开头的’module’中添加 "requestPermiss…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图,等值线图。 dataframe <-data.frame…...
.NET 8使用AOT发布ASP.NET Core应用
.NET 8 使用 AOT 发布 ASP.NET Core 应用 一、AOT 编译简介 在 .NET 开发中,编译方式有多种,其中 AOT(Ahead-Of-Time)编译是一种区别于传统 JIT(Just-In-Time)编译的方式。传统的 JIT 编译是在 .NET 应用…...