一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”

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)时间内查询到所需要的机器。其他操作和上一种解法类似。


代码展示(解法一):

http://student.csdn.net/mcd/topic/235300/937965

代码展示(解法二):

http://student.csdn.net/mcd/topic/235300/937980

雅虎刷题狂人曹鹏专家代码展示:

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

时间: 2024-10-14 12:36:07

一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”的相关文章

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

6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为原题的英文描述难以理解?还是题目本身的难度太高让很多人望而生畏知难而退? 为此我们诚邀各路英雄豪杰前来切磋探讨,共同发现: 1. 解题思路:本次大赛一等奖获得者-大连理工大学学生__newSolar,提供两种解题思路: 2. 代码样本:雅虎刷题狂人曹鹏专家的代码将作为样本展示,供学习借鉴: 3."一起来找茬儿":

仅1%的人知道的PDF打印技巧

PDF阅读器是我们现在学习办公中不可缺少的工具,不少人经常用到PDF阅读器的打印功能,但是你确定对PDF打印功能了解吗?学会了打印,可为您工作中带来极大的便利! 一起了解PDF打印的相关内容吧. 打开软件-->点击导航栏文件-->打印-->弹窗打印设置窗口: 生成不可编辑的PDF文档 打开打印窗口,打印机的名称请选择:Foxit Reader PDF Printer,勾选:作为图像打印,点击"确定"即可生成不可编辑的PDF文档: PS:以上方法就是利用文档的虚拟打印,

好站分享-互联网行业优秀网站分享、干货超多

几个优秀的互联网分享站点,干货不断...! 派代网 http://www.paidai.com 派代网创立于2007年2月8日,定位为中国电子商务驱动器,是目前国内最具影响力.交流最活跃的电子商务行业深度交流平台,用户数已超过四十九万余人,集聚了大量中国电子商务领军企业的创始人和资深行业专家,淘宝天猫大卖家,如王峻涛.刘强东.张国华.李阳.郭峰.孙弘.吕长城.赵迎光等. 派代网致力于促进行业交流.学习.合作,倡导友爱.尊重.分享.互助的业界文化,发扬"拼搏.舍得"的精神,以实际行动促进

手机站微信登录代码分享,自己开发仅供学习

首先前端的代码是 <div class="joint-login">   <h2><span>合作账号登录</span></h2>   <ul>       <li><a class="qq" href="javascript: void(0);"></a></li>   <li><a class="

超多慕课网实战教程破解自学教程百度云盘分享-Python/Java/前端后端/小程序/运维测试/人工智能

以下课程,需要的可以加我微*信:hgh813210,备注你需要的课程 Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式百度云实战分享 前端成长必经之路 基于Storm构建实时热力分布项目实战 Spark Streaming实时流处理项目实战 以慕课网日志分析为例 进入大数据 Spark SQL 的世界 手工测试企业项目实践及面试提升 Webpack + React全栈工程架构项目实战精讲 深度学习之神经网络核心原理与算法 Android应用发展趋势必备武器 热修复与插件化

智力测试

上次,我们进行了一次视觉的挑战,今天我来一次智力风暴,如何?鉴于很多题目大家都做过,如果可以把思维的过程写出来,也是一次很好锻炼.我一直在想,这些问题是属于什么问题,数学问题?物理问题?还是语文问题? 第一部分题目开始: 有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间? 一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三 个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然

阅读源代码之“那是我的青春”

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.                                                                                                                                          

面试总结: 头脑风暴题目

头脑风暴题目 通常大公司招人的时候除了考察专业知识,算法之外,还会通过智力题来考察面试者的智力和潜力: 本章节主要收集常见的头脑风暴题.@pdai 智力题 智力题1(海盗分金币)--海盗分金币 5个海盗抢得100枚金币后,讨论如何进行公正分配.他们商定的分配原则是: (1)抽签确定各人的分配顺序号码(1,2,3,4,5): (2)由抽到1号签的海盗提出分配方案,然后5人进行表决,如果方案得到超过半数的人同意,就按照他的方案进行分配,否则就将1号扔进大海喂鲨鱼: (3)如果1号被扔进大海,则由2号

改进方案博客汇总

9-652 界面与功能都非常齐全,有各个层次分明的模板,比如高等数学,C++课程等等,非常具有实用性,可以帮助学弟学妹们学习知识,也能提高及格率.缺点就是数据是在本地载入的,随着软件规模越做越大,数据量越来越多,那么就非常不好管理,这是一个待解决的问题. “荒野大镖客”回复:首先谢谢大家对于我们工作的认可,针对你们说的问题,我们组的解决方法是,虽然仍然不联网,但是加入了页面内容从文件读取的功能,这样解决了我们内容完全是静态文本的弊端,减少了页面数量,同时,离线文件也有较联网更加便利的优点,避免了