超5星难度【微软Core allocation】Coding赛题 - 解题思路&优秀代码分享,邀你来“找茬儿”

2023-11-02

6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%。为什么成绩如此出人意料?是因为原题的英文描述难以理解?还是题目本身的难度太高让很多人望而生畏知难而退?


为此我们诚邀各路英雄豪杰前来切磋探讨,共同发现:

1. 解题思路:本次大赛一等奖获得者-大连理工大学学生__newSolar,提供两种解题思路;

2. 代码样本:雅虎刷题狂人曹鹏专家的代码将作为样本展示,供学习借鉴;

3.“一起来找茬儿”:在所有答题者中,抽选部分未通过的错误代码,邀你来“找茬”;


题目描述:

在微软云计算服务的机房,有很多机器上跑着一个或者多个的虚拟机。在一段时间里,有很多用户会来请求建立虚拟机,或者把虚拟机关闭。这个时候,一个最重要的问题,是如何把用户的请求分配到不同的机器上。这里我们把实际的问题简化成对CPU的申请。

假定有M台机器用来服务用户,我们把机器编号成0到M。每台机器有多个CPU核,我们把核编号为0到Cm。

当用户在申请资源的时候,会生成一个请求 “申请<k>个核”,并且每个请求编号为m如果我们在现有的机器中能找到一台机器能满足,这台机器的空余的连续的核能满足要求的话,就返回<M, C>作为结果。M是机器的下标,C是申请的第一个核的下标。如果没有找到能满足请求的机器,<-1,

-1>作为结果。

当用户释放资源的时候,生成一个请求”第m个请求的资源释放”。保证一个请求释放最多一次。如果请求没有满足,忽略释放的请求。

输入

第一行是T, 总共的测试的个数

每个测试,第一行给出M 和Q,机器的总数和请求的个数

接下来是M行给出每一台机器的核数 Ci

接下来Q行给出请求。请求两种格式,

1.       A k    表示申请k个核

2.       F m   表示释放第m个请求申请的核

输出

对于每一个测试,首先输出

“Case #i:”  i是测试的标号,从1开始。

接下来对于所有申请的请求,输出m c 或者-1

-1

[限制条件]

1 <= T <= 20

1 <= M <= 100000

1 <= Ci <= 128

1 <= Q <= 1000000

1 <= k <= 128

1 <= m <= M

The number of queries of type 1 is the same

as that of type 2.


题目解析:

       考虑到数据范围,共有10W个机器,100W次查询,时间上不足以在每次询问中遍历所有的机器,但考虑到CPU的数量只有128

       可以从这里入手加快查询效率。

解法一:

我们维护128个集合,每个集合存储不同的最长连续空闲核数的机器,(eg, 集合1存最长空闲数为1的机器,集合2存最长空闲数为2的机器)。对于每次A询问,申请核数为k,我们只需枚举从k到128的所有集合中机器编号最小的,为了查找效率,我们可以使用

c++STL的set (或者java的TreeSet), 内部是树形结构,每个集合的第一个元素即为最小元素,查找到之后暴力更新这个机器使用情况并把新的机器信息加入到集合中,同时为了F操作保存询问信息。对于F操作相对简单,直接恢复记录的信息并更新机器信息就可以了。

此方法每次询问的复杂度大约为O(128*log(n))。

解法二:

对于每次询问,我们直接从10W个机器下手,为了提高效率可以使用线段树,线段树的每个节点维护当前区间所有机器最长空闲数,对于A查询,申请核数为k,如果当前节点左儿子值>=k,则在左子树中查询,否则在右子树查询,可以很容易在log(n)时间内查询到所需要的机器。其他操作和上一种解法类似。


优秀代码展示:

比赛一等奖获得者Newsolar代码展示(解法一):http://student.csdn.net/mcd/topic/235300/937965

比赛一等奖获得者Newsolar代码展示(解法二):http://student.csdn.net/mcd/topic/235300/937965

雅虎刷题狂人曹鹏专家代码展示:http://student.csdn.net/mcd/topic/235300/937984


“一起来找茬儿”:

在所有答题者中,抽选部分未通过的错误代码,邀你来“找茬”

错误代码一:http://student.csdn.net/mcd/topic/235300/937968

错误代码二:http://student.csdn.net/mcd/topic/235300/937971

错误代码三:http://student.csdn.net/mcd/topic/235300/937972

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超5星难度【微软Core allocation】Coding赛题 - 解题思路&优秀代码分享,邀你来“找茬儿” 的相关文章

随机推荐

  • 服务器的可维护性,可靠性和可维护性

    可靠性和可维护性 可靠性一直是戴尔服务器产品线的一大亮点 R515也不例外 如内部结构所示 当你打开R515机箱的时候 你可以很明显地看到风扇的数量 分布的各个组件和双电源机箱 你也可以感觉出从中取出各个组件和拆装机箱都十分简便 配合低能耗
  • Flask——使用表单并检验参数

    回顾上期的程序代码 from flask import Flask render template from flask wtf import FlaskForm from wtforms import StringField Passwo
  • 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法 邻接矩阵 邻接表 本文用邻接矩阵实现 一是代码量更少 二是代码风格也更贴近C语言 但不论是图的哪种实现方式 其基本的实现思想是不变的 1 节点的信息 我们用一维数组a n 来存储 假设图共有n个节点
  • QQ小程序广告代码

    qml内代码
  • elasticsearch查看分词结果

    第一种情况 查看任意一段文本 能分成哪些词汇 http localhost 9200 analyze POST 第二种情况 查看已经入库的数据 分词情况 http localhost 9200 index type id termvecto
  • keil中出现Undefined symbol 等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序 编译后出现以下问题 obj pro1 axf Error L6218E Undefined symbol FLASH PrefetchBufferCmd referred from main
  • C++动态内存管理——智能指针

    智能指针 1 什么是智能指针 智能指针 smart pointer 是存储指向动态分配 堆 对象指针的类 用于生存期控制 能够确保自动正确的销毁动态分配的对象 防止内存泄露 利用自动调用类的析构函数来释放内存 实现技术是使用引用计数 sha
  • C++——WebServer服务器项目

    项目场景 C WebServer服务器编程 项目搭建 1 配置虚拟机 下载XShell Xftp以及windows版本的VScode 2 安装SSH sudo apt install openssh server 3 在XShell中配置会
  • Parcel打包React

    Parcel打包React Parcel介绍 Parcel 官网 parceljs org 官网上的介绍 极速零配置Web应用打包工具 什么 对的 你没看错 它标称的零配置打包 这个打包工具其实在一些大厂 开发 Electron 和 Rea
  • PAT C入门题目-7-18 出租车计价 (15 分)

    7 18 出租车计价 15 分 本题要求根据某城市普通出租车收费标准编写程序进行车费计算 具体标准如下 起步里程为3公里 起步费10元 超起步里程后10公里内 每公里2元 超过10公里以上的部分加收50 的回空补贴费 即每公里3元 营运过程
  • MAC安装Securecrt

    文章目录 一 下载地址 二 安装软件 1 下载的文件有2个 一个是安装包 一个是安装文件 2 打开安装包以后 将安装程序拖到应用程序中 三 执行安装文件 1 执行安装 2 错误解决 四 安装软件 1 打开SecureCTR后 选择Enter
  • 关于Swagger中访问不了文档页面

    因为在SpringBoot启动类中 没有加上 EnableSwagger2WebMvc注解 这个注解的作用是启用swagger对应用程序暴露的API端点进行文档化 个人推断和拦截器拦截请求有关 解决办法就是加 EnableSwagger2W
  • 计算机精英ACM fellow和ACM杰出科学家,各校校友统计

    首先谢谢东南 大学网友青山人的统计工作 http bbs netbig com thread 2675926 1 1 html 人数相同 按照学校名称拼音排序 先统计最高荣誉 ACM Fellow 1 的精英 中国科大 81硕 李 凯 19
  • Spring面试问答Top 25

    本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题 这些问题有可能在你下次面试时就会被问到 对于本文中未提及的Spring其他模块 我会单独分享面试的问题和答案 欢迎大家向我推荐你在面试过程中遇到关于Spring的问题 我会
  • APP 性能测试工具

    一 APP 自动化测试工具Appium 官网 http appium io GitHub 地址 https github com appium appium 介绍 Appium 是一个开源的 跨平台的自动化测试工具 支持自动化 iOS An
  • 使用adb 命令(atrace)抓起systrace的方法。【转】

    本文转载自 https www cnblogs com liuliu word p 9963017 html adb shell atrace c b 10240 async start z gfx 1 执行查看adb shell atra
  • 【Python案例】一键自动抠图生成证件照

    0 效果与体验 不想去照相馆 担心肖像隐私被第三方获取 不会抠图 本文实现基于人工智能的一键自动抠图生成证件照 在进入正文之前 先看最终效果 为了让读者快速体验 我写了个小程序 证照工具箱 可打开直接体验 1 人脸检测 在制作证件照时 首选
  • Windows下用pandoc将LaTex转成Word——使用错误总结

    以下是废话阶段 一般期刊投稿都是latex版本啊 奈何有时候机缘总是那么巧合 假如需要word版本呢 科研的乐趣 不就是发现问题 解决问题嘛 那么 就开始愉快地解决问题吧 以下是正片 首先 从无到有的过程当然是先借鉴别人的东西啦 所以 我主
  • idea自动生成类和方法注释

    idea自动生成类和方法注释 一 类注释 方式一 打开settings gt File and COde Templates 选中Files gt Class 添加类注释信息 新建一个类 就会看到类上会自动添加注释 方式二 通过设置文件头来
  • 超5星难度【微软Core allocation】Coding赛题 - 解题思路&优秀代码分享,邀你来“找茬儿”

    6月23日英雄会平台发布了一道难度为超5星的微软比赛题目 截止活动结束共有300多名编程爱好者参与线上答题 而最终通过者仅有7人 通过率仅为2 为什么成绩如此出人意料 是因为原题的英文描述难以理解 还是题目本身的难度太高让很多人望而生畏知难