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

【华为OD机试真题 C++】1051 - 处理器问题 | 机试题+算法思路+考点+代码解析

文章目录

    • 一、题目
      • 🔸题目描述
      • 🔸输入输出
      • 🔸样例1
      • 🔸样例2
    • 二、题目解析
    • 三、代码参考
  • 作者:KJ.JK


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:华为OD机试真题(C++)


一、题目


🔸题目描述

某公司研发了一款高性能AI处理器。 每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。
 
编号0-3的处理器处于同一个链路中, 编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信。
 
现给定服务器可用的处理器编号数组array,以及任务申请的处理器数量num,找出符合下列亲和性调度原则的芯片组合。
 
如果不存在符合要求的组合,则返回空列表。
 
和性调度原则:
 
1、如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩
余4个。
 
2、如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其余是剩余4个,最后是剩余3个。
 
3、如果申请处理器个数为4,则必须选择同一链路剩可用的处理器数量为4个。
 
4、如果申请处理器个数为8,则申请节点所有8个处理器。
 
提示:
 
1、任务申请的处理器数量只能是1、2、4、8。
 
2、编号0-3的处理器处于一个链路, 编号4-7的处理器处于另外一个链路。
 
3、处理器编号唯一, 坏存在相同编号处理器。


🔸输入输出

输入
输入包含可用的处理器编号数组array,以及任务申请的处理器数量num两个部分。
 
第一行为array,第二行为num。例如:[0,1,4,5, 6, 7]
 
表示当前编号为0、1、 4、5、6、7的处理器可用。任务申请1个处理器。
 
0 <= array.length <= 8
0 <= array[i] <= 7
numin[1,2,4,8]
 
输出
输出为组合列表,当array=[0,1, 4, 5, 6, 7],num=1时,输出为
[[0],[1]].


🔸样例1

输入
[0,1,4,5,6,7]
1输出
[[0], [1]] 说明:
根据第一亲和性调度原则, 在剩余两个处理器的链路(0, 1, 2, 3)中选择处理器。
由于只有01可以用,则返回任意一颗处理器即可。

🔸样例2

输入
[0,1,4,5,6,7]
4输出
[4, 5, 6,7]说明:
根据第三亲和性调度原则,必须选择同一链路剩余可用的处理器数量为4个的环

二、题目解析

用例中,链路link1=[0,1], 链路link2=[4,5,6,7]
现在要选1个处理器,则需要按照亲和性调度原则
如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩
余4个。
最佳的是,找剩余可用1个处理器的链路,发现没有,link1剩余可用2, link2剩余可用4
其次的是,找剩余可用3个处理器的链路,发现没有
再次的是,找剩余可用2个处理器的链路,link1符合要求, 即从0和1处理器中任选一个,有两种选择,可以使用dfs找对应组合。


三、代码参考

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>using namespace std;vector<vector<int>> getResult(vector<int> arr, int num);void dfs(vector<int> arr, int index, int level, vector<int> path, vector<vector<int>>& res);int main() {vector<int> arr;int num = 0;string input;getline(cin, input);if (arr.empty()) {string temp = input.substr(1, input.size() - 2);string delimiter = ",";size_t pos = 0;string token;while ((pos = temp.find(delimiter)) != string::npos) {token = temp.substr(0, pos);arr.push_back(stoi(token));temp.erase(0, pos + delimiter.length());}arr.push_back(stoi(temp));}while (getline(cin, input)) {num = stoi(input);vector<vector<int>> result = getResult(arr, num);cout << "["; for (auto res : result) {cout << "[";for (int i = 0; i < res.size(); i++) {cout << res[i];cout << "]";}if(res != result.back()){cout << " ," ;}}cout << "]" ;}return 0;
}vector<vector<int>> getResult(vector<int> arr, int num) {vector<int> link1;vector<int> link2;sort(arr.begin(), arr.end());for (const auto& e : arr) {if (e < 4) {link1.push_back(e);}else {link2.push_back(e);}}vector<vector<int>> ans;int len1 = link1.size();int len2 = link2.size();if (num == 1) {if (len1 == 1 || len2 == 1) {if (len1 == 1) {dfs(link1, 0, 1, {}, ans);}if (len2 == 1) {dfs(link2, 0, 1, {}, ans);}}else if (len1 == 3 || len2 == 3) {if (len1 == 3) {dfs(link1, 0, 1, {}, ans);}if (len2 == 3) {dfs(link2, 0, 1, {}, ans);}}else if (len1 == 2 || len2 == 2) {if (len1 == 2) {dfs(link1, 0, 1, {}, ans);}if (len2 == 2) {dfs(link2, 0, 1, {}, ans);}}else if (len1 == 4 || len2 == 4) {if (len1 == 4) {dfs(link1, 0, 1, {}, ans);}if (len2 == 4) {dfs(link2, 0, 1, {}, ans);}}}else if (num == 2) {if (len1 == 2 || len2 == 2) {if (len1 == 2) {dfs(link1, 0, 2, {}, ans);}if (len2 == 2) {dfs(link2, 0, 2, {}, ans);}}else if (len1 == 4 || len2 == 4) {if (len1 == 4) {dfs(link1, 0, 2, {}, ans);}if (len2 == 4) {dfs(link2, 0, 2, {}, ans);}}else if (len1 == 3 || len2 == 3) {if (len1 == 3) {dfs(link1, 0, 2, {}, ans);}if (len2 == 3) {dfs(link2, 0, 2, {}, ans);}}}else if (num == 4) {if (len1 == 4 || len2 == 4) {if (len1 == 4) {ans.push_back(link1);}if (len2 == 4) {ans.push_back(link2);}}}else if (num == 8) {if (len1 == 4 && len2 == 4) {vector<int> tmp(link1);tmp.insert(tmp.end(), link2.begin(), link2.end());ans.push_back(tmp);}}return ans;
}void dfs(vector<int> arr, int index, int level, vector<int> path, vector<vector<int>>& res) {if (path.size() == level) {res.push_back(path);return;}for (int i = index; i < arr.size(); i++) {path.push_back(arr[i]);dfs(arr, i + 1, level, path, res);path.pop_back();}
}

作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

相关文章:

【华为OD机试真题 C++】1051 - 处理器问题 | 机试题+算法思路+考点+代码解析

文章目录 一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1&#x1f538;样例2 二、题目解析三、代码参考 作者&#xff1a;KJ.JK &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &…...

Linux 常用操作命令大全

一、基础知识 1.1 Linux系统的文件结构 /bin 二进制文件&#xff0c;系统常规命令 /boot 系统启动分区&#xff0c;系统启动时读取的文件 /dev 设备文件 /etc 大多数配置文件 /home 普通用户的家目录 /lib 32位函数库 /lib64 64位库 /media 手动临时挂载点 /mnt 手动临时挂载点…...

Git使用教程

Git 目标 Git简介【了解】 使用Git管理文件版本【重点】 远程仓库使用【掌握】 分支管理【重点】 远程仓库【掌握】 一、Git简介 1、版本控制系统简介 1.1、版本控制前生今世 版本控制系统Version Control Systems&#xff0c;简称 VCS是将『什么时候、谁、对什么文件…...

substrate中打印调试信息的多种方式详解

目录 1. 获取substrate-node-template代码2. 添加一个用于测试的pallet至依赖到pallets目录3. log方式来输出信息3.1 将log依赖添到cargo.toml文件3.2 log-test/src/lib.rs修改call方法 3.3 polkadot.js.调用测试函数do_something_log_test4. printable trait方式来输出信息4.1…...

Disentangled Graph Collaborative Filtering

代码地址&#xff1a;https://github.com/ xiangwang1223/disentangled_graph_collaborative_filtering Background&#xff1a; 现有模型在很大程度上以统一的方式对用户-物品关系进行建模(将模型看做黑盒&#xff0c;历史交互作为输入&#xff0c;Embedding作为输出。)&…...

Nginx快速上手

Nginx快速上手 OVERVIEW Nginx快速上手一、基本概念1.Nginx初步认识2.正向/反向代理&#xff08;1&#xff09;正向代理&#xff08;2&#xff09;反向代理 二、Nginx 安装和配置1.安装2.Nginx指令3.Nginx配置 三、Nginx的使用1.Web服务器&#xff08;1&#xff09;静态网页存储…...

【设计模式】实际场景解释策略模式与工厂模式的应用

文章目录 前言策略模式概念场景示例 工厂模式概念场景示例 策略模式与工厂模式的比较相同点不同点 总结 前言 策略模式和工厂模式是常见的设计模式&#xff0c;它们可以帮助我们更好地组织和管理代码&#xff0c;提高代码的可维护性和可扩展性。 在本篇博客中&#xff0c;我将…...

外包干了三年,算是废了...

先说一下自己的情况。大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近3年的测试&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了三年&#xff0c…...

九龙证券|光模块概念股封单资金超3亿元,传媒板块涨停潮来袭

今天A股三大股指低开低走。沪深两市收盘共37股涨停。剔除4只ST股&#xff0c;合计33股涨停。另外&#xff0c;10股封板未遂&#xff0c;整体封板率为78.72%。 涨停战场&#xff1a; 华工科技封单资金超3亿元 从收盘涨停板封单量来看&#xff0c;同方股份封单量最高&#xff0…...

[ES6] 数组

[ES6] 数组 数组的创建类数组对象可迭代对象的转换 扩展方法findfindIndexfillcopyWithinentrieskeysvaluesincludesflatflatMap 扩展运算符复制数组合并数组 数组缓冲区创建数组缓冲区视图创建 定型数组创建通过数组缓冲区生成通过构造函数 定型数组特性 拷贝浅拷贝深拷贝 数组…...

【问题描述】编写一个程序计算出球、圆柱和圆锥的表面积和体积。

【问题描述】 编写一个程序计算出球、圆柱和圆锥的表面积和体积。 要求&#xff1a; &#xff08;1&#xff09;定义一个基类&#xff0c;至少含有一个数据成员半径&#xff0c;并设为保护成员&#xff1b; &#xff08;2&#xff09;定义基类的派生类球、圆柱、圆锥&#…...

Python 人工智能:16~20

原文&#xff1a;Artificial Intelligence with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何…...

【华为OD机试真题】最优资源分配(javapython)

最优资源分配 知识点数组贪心Q时间限制:1s空间限制:32MB限定语言:不限 题目描述: 某块业务芯片最小容量单位为1.25G,总容量为M1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。 配置A:占用容量为1.251=1.25G 配置B:占用容量为1.252=2…...

git的使用——操作流程

一、什么是git git是一个开源的分布式版本控制软件&#xff0c;能够有效并高效的处理很小到非常大的项目。 二、添加SSH公钥 安装下载后&#xff0c;会发现鼠标右击&#xff0c;会出现 Git Bash Here 这个选项&#xff0c;如图所示&#xff0c;点击进入 1.打开git窗口后&…...

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…...

ClickHouse入门详解

ClickHouse基础部分详解 一、ClickHouse简介二、ClickHouse单机版安装2.1、ClickHouse安装前准备环境2.2、ClickHouse单机安装2.3、ClickHouse一些默认路径2.4、ClickHouse端口说明 三、ClickHouse数据类型四、ClickHouse的表引擎4.1 MergeTree4.1.1 partition by 分区 五、Cli…...

javaweb笔记2

JSP 1、在webapp的根目录下新建一个index.jsp文件,访问以下地址&#xff1a; http://localhost:8080/webappName/index.jsp 实际上访问这个index.jsp文件&#xff0c;底层执行的是&#xff1a;index_jsp.class这个程序。 这个index.jsp会被tomcat翻译成index_jsp.j…...

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如…...

算法训练day2:哈希表

哈希表理论基础 哈希表是根据关键码的值而直接进行访问的数据结构。 当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间&#xff0c;因为我们要使用额外的数组&#xff0c;set或者是map来存放数据&#…...

Git——利用SSH密钥本地仓库上传远程GitHub库

文章目录 1、前言2、详细步骤2.1 创建密钥2.2 进入密钥文件并复制2.3 在GitHub上添加密钥2.4 回到本地仓库文件夹&#xff0c;连接GitHub并上传 3. 结语 1、前言 现在想要从本地设备将本地仓库上传到GitHub上需要用到SSH密钥&#xff0c;接下来讲解大致的步骤&#xff0c;本文默…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...