当前位置: 首页 > 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;本文默…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...