当前位置: 首页 > ds >正文

BOSS的收入 - 华为OD机试(A卷,C++题解)

华为OD机试题库《C++》限时优惠 9.9

华为OD机试题库《Python》限时优惠 9.9

华为OD机试题库《JavaScript》限时优惠 9.9

代码不懂有疑问欢迎留言或私我们的VX:code5bug。

华为OD机试

题目描述

一个 XX 产品行销总公司,只有一个 boss,其有若干一级分销,一级分销又有若干二级分销,每个分销员仅有唯一上级分销。规定,每个月,下级分销需要将自己的总收入(自己+下级上交的)每满 100 元交 15 元给自己的上级。

现给定一组分销的关系,和每个分销的收入,请找出 boss 并计算出这个 boss 的收入。

比如:
收入 100 元,上交 15 元;
收入199元(99元不够100),上交15 元,
收入200元,上交30元。

输入描述

  • 第一行输入关系的总数量 N
  • 接下来 N 行,每行输入关系信息,格式:分销ID 上级分销ID 收入
  • 分销 ID 取值范围 0~65535
  • 收入范围 0~65535,单位元
  • 输入数据中仅存在 1 个 boss,不存在环路

输出描述

  • 输出 boss 的 ID总收入

示例1

输入:
5
1 0 100
2 0 199
3 0 200
4 0 200
5 0 200输出:
0 120

题解

这个问题主要涉及树形结构的收入传递,需要从底层分销商逐层向上计算上交收入,直到找到最终的 boss 并计算出总收入。

算法思路

  1. 数据结构:

    • 使用一个哈希表 parent 来记录每个分销商的上级分销商。
    • 使用一个哈希表 income 来记录每个分销商的初始收入。
    • 使用一个哈希表 todo 来记录每个分销商下级分销商的数量。
  2. 步骤:

    • 从最底层的分销商开始计算,底层分销商没有下级分销商。
    • 每个分销商收入的 15% 会上交给它的上级,直到所有下级分销商的收入都上交完。
    • 使用广度优先搜索(BFS)来逐层处理每个分销商,直到找到 boss。
    • 最终,当队列为空且找到了没有上级分销的分销商时,这个分销商就是 boss,输出它的 ID 和收入。
  3. 时间复杂度:

  • O(N),其中 N 为输入的关系数量。每个分销商和关系最多被处理一次。
  1. 空间复杂度:
  • O(N),用于存储 parentincometodo 三个哈希表。

C++

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;// 记录分销上级unordered_map<int, int> parent;// 记录总收入unordered_map<int, int> income;// 记录下级分销收入未上交的人数unordered_map<int, int> todo;// 读入关系数据for (int i = 0; i < n; i++) {int id, pid, money;cin >> id >> pid >> money;parent[id] = pid;income[id] = money;todo[pid]++;}// 从最底层的分销向上进行计算queue<int> q;// 找到所有没有下级分销的分销商for (auto& entry : income) {int id = entry.first;if (todo[id] == 0) {q.push(id);}}// BFS 计算收入while (!q.empty()) {int id = q.front();q.pop();// 没有上级分销的即为 bossif (parent.find(id) == parent.end()) {cout << id << " " << income[id] << endl;break;}int pid = parent[id];// 上交收入给上级income[pid] += income[id] / 100 * 15;todo[pid]--;// pid 的所有下级分销已经上交完if (todo[pid] == 0) {q.push(pid);}}return 0;
}

希望这个专栏不仅能帮您成功通过华为机试,还能让您熟练掌握算法。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

http://www.xdnf.cn/news/3796.html

相关文章:

  • 昇腾的昇思MindSpore是什么?跟TensorFlow/PyTorch 等第三方框架有什么区别和联系?【浅谈版】
  • c++ 二级指针 vs 指针引用
  • 小土堆pytorch数据加载概念以及实战
  • 【Tauri2】37——后端处理invoke
  • SVM实战:从理论到鸢尾花数据集的分类可视化
  • skynet中的client.socket库函数详解
  • WebRTC 服务器之Janus架构分析
  • 大模型开发的环节
  • AIGC算力消耗白皮书:Stable Diffusion vs Midjourney的架构成本差异
  • 头歌数据库课程实验(索引与数据库完整性)
  • 从零认识阿里云OSS:云原生对象存储的核心价值
  • 解析机器人 2.0.2 | 支持超过50种短视频平台的链接解析,无水印提取,多功能下载工具
  • 华为OD机试真题——智能驾驶(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 什么是函数重载?
  • MySQL 空值处理函数对比:IFNULL、COALESCE 和 NULLIF
  • 《Linux macOS :GCC升级方法》
  • 私人医生通过AI分析基因数据,是否有权提前告知癌症风险?
  • 【AI面试准备】XMind拆解业务场景识别AI赋能点
  • QML图像提供器 (Image Provider)
  • 【Ansible自动化运维实战:从Playbook到负载均衡指南】
  • 【算法基础】插入排序算法 - JAVA
  • 怎样增加AI对话的拟人化和增加同理心
  • WEB前端小练习——记事本
  • 先知AIGC超级工场,撬动运营效率新杠杆
  • 在 Trae CN IDE 中配置 Python 3.11的指南
  • Nat. Hum. Behav:大脑“变形记”,注意力错误下的空间认知奇遇
  • 如何解决 403 错误:请求被拒绝,无法连接到服务器
  • 【KWDB 创作者计划】Docker单机环境下KWDB集群快速搭建指南
  • with的用法
  • 家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南