每日一题——提取服务器物料型号并统计出现次数

news2025/6/1 1:39:09

提取服务器物料型号并统计出现次数

    • 一、题目描述
      • 💡 输入描述:
      • 📤 输出描述:
    • 二、样例示例
      • 🎯 示例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}
  • 使用 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++ 基础练习题,也可以拓展到更复杂的日志解析或配置提取任务中。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宫格导航--纯血鸿蒙组件库AUI

摘要&#xff1a; 宫格导航(A_GirdNav)&#xff1a;可设置导航数据&#xff0c;建议导航项超过16个&#xff0c;可设置“更多”图标指向的页面路由。最多显示两行&#xff0c;手机每行最多显示4个图标&#xff0c;折叠屏每行最多6个图标&#xff0c;平板每行最多8个图标。多余图…

RNN 循环神经网络:原理与应用

一、RNN 的诞生背景 传统神经网络&#xff08;如 MLP、CNN&#xff09;在处理独立输入时表现出色&#xff0c;但现实世界中存在大量具有时序依赖的序列数据&#xff1a; 自然语言&#xff1a;"我喜欢吃苹果" 中&#xff0c;"苹果" 的语义依赖于前文 "…

若依框架 账户管理 用户分配界面解读

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

文档贡献 | 技术文档贡献流程及注意事项(保姆级教程)

内容目录 一、注册流程 二、创建分支&#xff08;Fork&#xff09; 三、使用GitLab界面更新文件的MR流程 四、使用Git命令行工具更新文件的MR流程 五、注意事项 一、注册流程 1、注册页面 在长安链平台注册页面&#xff0c;输入手机号码 &#xff0c;点击 “获取验证码”…

open-vscode-server +nodejs 安装

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

知行之桥如何将消息推送到钉钉群?

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

09《从依赖管理到容器化部署:Maven 全链路实战笔记,解锁 Java 项目自动化构建的终极奥秘》

目录 一、Maven 核心基础强化 &#xff08;一&#xff09;Maven 架构与工作原理 1. 核心组件解析 2. 工作流程图示​编辑 &#xff08;二&#xff09;项目结构深度实践 1. 标准目录扩展说明 2. 多模块项目典型结构示例​编辑 二、依赖管理高级进阶 &#xff08;一&…

<el-date-picker>组件传参时,选中时间和传参偏差8小时

遇到一个bug&#xff0c;不仔细看&#xff0c;都不一定能发现&#xff0c;bug描述&#xff1a;我们有一个搜索框&#xff0c;里面有一个时间选择器&#xff0c;当我使用<el-date-picker>时&#xff0c;我发现当我选择时分秒之后&#xff0c;显示都正常&#xff0c;但是当…

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, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时…

谷歌浏览器Google Chrome v137.0.7151.41 中文版本版+插件 v1.11.1

一、软件介绍 这个版本解压就可以用&#xff0c;界面是中文的。 保留了核心功能&#xff0c; 二、软件特点 便携性 &#xff1a;解压即可使用&#xff0c;不想用了直接删掉整个文件夹。 增强功能 &#xff1a;通过Chrome增强软件劫持补丁chromev1.11.1 x64 (version.dll)实现多…

国芯思辰| 同步降压转换器CN2020应用于智能电视,替换LMR33620

在智能电视不断向高画质、多功能、智能化发展的当下&#xff0c;其内部电源管理系统的性能至关重要。同步降压转换器可以为智能电视提供稳定、高效的运行。 国芯思辰CN2020是一款脉宽调制式同步降压转换器。内部集成两个功率MOS管&#xff0c;在4.5~18V宽输入电压范围内可以持…

DeepSeek 提示词大全

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

俄罗斯无人机自主任务规划!UAV-CodeAgents:基于多智能体ReAct和视觉语言推理的可扩展无人机任务规划

作者&#xff1a;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单位&#xff1a; 1 ^{1} 1斯科尔…

结构性设计模式之Bridge(桥接)

结构性设计模式之Bridge&#xff08;桥接&#xff09; 摘要 桥接模式是一种结构性设计模式&#xff0c;其核心思想是将抽象部分与实现部分分离&#xff0c;使二者能够独立变化。本文通过汽车产品生产案例&#xff08;产品A/B与颜色红/蓝/黄&#xff09;展示了桥接模式的应用&…

Android 16系统源码_无障碍辅助(一)认识无障碍服务

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

分布式数据库备份实践

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

如何发布npm包?

如何发布npm包&#xff1f; 1. 注册账号[npm官网](https://www.npmjs.com/)2. 检查 npm 源是否在官方 npm 仓库&#xff0c;如果不在&#xff0c;进行切换3. 检查4. 打包配置5. 发布6. 使用错误&#xff1a;版本更新命令 1. 注册账号npm官网 2. 检查 npm 源是否在官方 npm 仓库…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

OpenCV计算机视觉实战(8)——图像滤波详解

OpenCV计算机视觉实战&#xff08;8&#xff09;——图像滤波详解 0. 前言1. 线性滤波1.1 均值滤波1.2 高斯滤波1.3 拉普拉斯滤波1.4 Sobel 滤波 2. 非线性滤波3. 自定义卷积核小结系列链接 0. 前言 在本文中&#xff0c;我们将深入探索线性与非线性滤波的算法原理、性能优化及…

自动化安全脚本学习

1.目录扫描器 目标&#xff1a;使用python编写一个自动化目录扫描工具&#xff0c;实现简单信息收集&#xff0c;判断目标网站是否存在常见路径。 import requests #用于发HTTP请求 from concurrent.futures import ThreadPoolExecutor #实现多线程扫描# 扫描目标 target h…