Hulu 2020年校招-算法题《Hulu杀》Python
已经工作了,义务支援下一届,哈哈,好久不刷题还真有点生疏。Hulu今年秋招的题目并不难,一共四个编程题,基本是在常规问题上的延伸。今天先整理第一个题目,其他题目后面有时间继续整理。
问题描述:
Hulu杀
有 n
个葫芦娃一起玩Hulu杀,他们被分为好人
和坏人
两个阵营,打乱之后围成一个圈,按照顺时针序
编号为 0~n-1
。然后随机选定一个葫芦娃,从他/她开始由1
到m
顺时针报数
,数到m
的人被杀,下一个人继续从1
报数,如此循环直到剩下最后一个人,这个人所属阵营获得胜利。我们用一个整型数组a[i]=1
表示i
是好人,a[i]=0
表示i
是坏人;整型数组w[i]
表示玩家i被选为起始位置的权重,即玩家i
有w[i]/sum(w[i])
的概率做起始位置。求好人获胜的概率,四舍五入到小数点后五位数字(不足五位需要补零)
示例 1:
输入:
# 第一行为2个空格分开的整数,分别表示n和m
# 第二行为n个空格分开的整数,表示a[i]
# 第二行为n个空格分开的整数,表示w[i]
# 输入范围0<m<n<=1000, 0<sum(w[i])<=10000000
-------------------------------------------
3 2
0 0 1
2 1 1
输出:
# 输出一个浮点数,表示好人获胜的概率
-------------------------------------------
0.50000
问题分析:
很显然,这是一个经典的约瑟夫环问题的延伸,只要在约瑟夫环问题求解基础上,加上一层映射关系即可得出答案。具体思路如下:
(1)先求出以第一个人开始,最后剩下的人(也就是约瑟夫环求解)
(2)在(1)的基础上求出每个起始位置,最后剩下的人(人)
(3)在(2)的基础上求出每个起始位置对应的是好人获胜还是坏人获胜
(4)在(3)的基础上求出每个起始位置对应的好人获胜的概率(权重求和即可),然后计算:好人获胜的概率(权重) / 总的概率(权重)
即可得出答案。
注意: 输出要求应该是字符串
Python实现 AC:
# =============================================================
# !/usr/bin/python
# -*- coding=utf-8 -*-
# Name: HuluKill
# Description: Hulu 2020年校招 笔试题(1) -- Hulu杀
# Author: yinxing
# Date: 2019-09-05 19:00
# =============================================================class HuluKill:def JosephRing(self, n, m):"""约瑟夫环问题求解:param n: n 个人(0, 1, 2 ... n-1):param m: 每 m 人出列:return: 最后剩下的那个人索引"""if n < 1 or m < 1: return -1last = 0for i in range(2, n+1):last = (last + m) % ireturn lastdef Solution(self, n, m, a, w):"""获取Hulu杀的解:param n: n 个人(0, 1, 2 ... n-1):param m: 每 m 人出列:param a: 好人,坏人列表:param w: 开始的权重:return: 好人队获胜的概率(保留5位小数)"""victory = self.JosephRing(n, m) # 获取选择第一个人开始,最后剩下的人(索引)victorylist = [(victory+i) % n for i in range(n)] # 每个位置开始,对应获胜的人peoplelist = [a[victorylist[i]] for i in range(n)] # 每个位置开始,对应胜利的人(好人,坏人)GoodPerson = sum([w[i] for i in range(n) if peoplelist[i] == 1]) # 好人获胜的概率(权重)return '%.5f' % (GoodPerson/sum(w)) # 结果 = 好人获胜的概率(权重) / 总的概率(权重)if __name__ == '__main__':hulukill = HuluKill()# n, m = map(int, input().split())# a = list(map(int, input().split()))# w = list(map(int, input().split()))n, m = 3, 2a = [0, 0, 1]w = [2, 1, 1]print(hulukill.Solution(n, m, a, w)) # 0.50000
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。
Hulu 2020年校招-算法题《Hulu杀》Python相关推荐
- 如何看待 2020 届校招算法岗「爆炸」的情况?
编辑:忆臻 https://www.zhihu.com/question/342267611 本文仅作为学术分享,如果侵权,会删文处理 如何看待 2020 届校招算法岗「爆炸」的情况? 作者:Ted ...
- 如何看待 2020 届校招算法岗「爆炸」的情况?英雄所见略同
来自:计算机视觉联盟公众号 转载 :知乎问题 如何看待 2020 届校招算法岗「爆炸」的情况? 链接:https://www.zhihu.com/question/342267611 本文仅作为学术交 ...
- 剪绳子 算法_[校招-算法题]动态规划
动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...
- 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...
为了进入大厂,我想很多人都会去牛客.知乎.CSDN等平台去查看面经,了解各个大厂在问技术问题的时候都会问些什么样的问题. 在看了几十上百篇面经之后,我将算法工程师的各种类型最常问到的问题都整理了出来, ...
- 2020届校招算法岗面经汇总
作者:我是一个小和尚~ 链接:https://www.nowcoder.com/discuss/205497 来源:牛客网 [百度]百度知识图谱nlp日常实习一面凉 https://www.nowco ...
- 2017虹软校招算法题
前段时间参加了虹软的校招笔试,遇到了一道算法题,现摘录下来做个备份. 题目: 给定一个mXn的矩阵,如下图所示,里面所有元素都非负,试找出一条从左上角到右下角的一条路径,要求路径上的数字之和最小.注: ...
- 小红书2020校招算法题(三)
目录 一.笔记草稿 二.笔记精选 一.笔记草稿 题目描述: 薯队长写了一篇笔记草稿,请你帮忙输出最后内容. 输入字符包括,"(" , ")" 和 "& ...
- 如何看待 2020 届校招算法岗供远大于求的情况?
编辑:Charlotte https://www.zhihu.com/question/344122516 本文仅作为学术分享,如果侵权,会删文处理 作者:周国睿链接: https://www.zhi ...
- 罗浩.ZJU | 如何看待 2020 届校招算法岗「爆炸」的情况?
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 作为20届CV方向校招的一员,我也经历了今年的校招,也在关心着师弟师妹们的秋招情况,的 ...
- c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1
二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...
最新文章
- AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术...
- 存储库访问被拒绝。通过部署密钥进行访问是只读的
- jvm性能调优实战 - 25模拟在Young GC过后因为放入下Survivor区域直接进入老年代
- 在notebook中如何能完整的显示长文本内容
- --SQL code# --创建表及字段描述信息
- C#控件绑定数据源方式
- word 替换 增加引号_如何在Word 2013文档中替换部分(不是全部)智能引号
- python 导入包 作用域_Python 包、模块、函数、变量作用域
- 前端模块化(二):模块化编程
- qt android文件读写文件,qt android 开发之写入xml配置文件篇
- go并发编程-理解不同并发场景下的go原语
- 限制会话id服务端不共享_【干货分享】Web安全漏洞深入分析及其安全编码
- 轻量级网络模型之ShuffleNet
- [ActiveForm] -- ActiveForm::begin表单用法
- 线程(一)伤害不大,侮辱性极强——idm与多人运动
- 如何设计一个吸引访问者的网站主页?
- 基于WeX5平台开发微信公众号中的在线问卷调查
- 路由器角色 ABR ASBR
- 严寒冰 国家计算机网络,北京航空航天大学计算机学院——严寒冰
- 苹果iphone4s英文系统怎么显示中文联系人?