已经工作了,义务支援下一届,哈哈,好久不刷题还真有点生疏。Hulu今年秋招的题目并不难,一共四个编程题,基本是在常规问题上的延伸。今天先整理第一个题目,其他题目后面有时间继续整理。

问题描述:

Hulu杀

n 个葫芦娃一起玩Hulu杀,他们被分为好人坏人两个阵营,打乱之后围成一个圈,按照顺时针序编号为 0~n-1 。然后随机选定一个葫芦娃,从他/她开始由1m顺时针报数,数到m的人被杀,下一个人继续从1报数,如此循环直到剩下最后一个人,这个人所属阵营获得胜利。我们用一个整型数组a[i]=1表示i是好人,a[i]=0表示i是坏人;整型数组w[i]表示玩家i被选为起始位置的权重,即玩家iw[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相关推荐

  1. 如何看待 2020 届校招算法岗「爆炸」的情况?

    编辑:忆臻 https://www.zhihu.com/question/342267611 本文仅作为学术分享,如果侵权,会删文处理 如何看待 2020 届校招算法岗「爆炸」的情况? 作者:Ted ...

  2. 如何看待 2020 届校招算法岗「爆炸」的情况?英雄所见略同

    来自:计算机视觉联盟公众号 转载 :知乎问题 如何看待 2020 届校招算法岗「爆炸」的情况? 链接:https://www.zhihu.com/question/342267611 本文仅作为学术交 ...

  3. 剪绳子 算法_[校招-算法题]动态规划

    动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...

  4. 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...

    为了进入大厂,我想很多人都会去牛客.知乎.CSDN等平台去查看面经,了解各个大厂在问技术问题的时候都会问些什么样的问题. 在看了几十上百篇面经之后,我将算法工程师的各种类型最常问到的问题都整理了出来, ...

  5. 2020届校招算法岗面经汇总

    作者:我是一个小和尚~ 链接:https://www.nowcoder.com/discuss/205497 来源:牛客网 [百度]百度知识图谱nlp日常实习一面凉 https://www.nowco ...

  6. 2017虹软校招算法题

    前段时间参加了虹软的校招笔试,遇到了一道算法题,现摘录下来做个备份. 题目: 给定一个mXn的矩阵,如下图所示,里面所有元素都非负,试找出一条从左上角到右下角的一条路径,要求路径上的数字之和最小.注: ...

  7. 小红书2020校招算法题(三)

    目录 一.笔记草稿 二.笔记精选 一.笔记草稿 题目描述: 薯队长写了一篇笔记草稿,请你帮忙输出最后内容. 输入字符包括,"(" , ")" 和 "& ...

  8. 如何看待 2020 届校招算法岗供远大于求的情况?

    编辑:Charlotte https://www.zhihu.com/question/344122516 本文仅作为学术分享,如果侵权,会删文处理 作者:周国睿链接: https://www.zhi ...

  9. 罗浩.ZJU | 如何看待 2020 届校招算法岗「爆炸」的情况?

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 作为20届CV方向校招的一员,我也经历了今年的校招,也在关心着师弟师妹们的秋招情况,的 ...

  10. c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1

    二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...

最新文章

  1. AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术...
  2. 存储库访问被拒绝。通过部署密钥进行访问是只读的
  3. jvm性能调优实战 - 25模拟在Young GC过后因为放入下Survivor区域直接进入老年代
  4. 在notebook中如何能完整的显示长文本内容
  5. --SQL code# --创建表及字段描述信息
  6. C#控件绑定数据源方式
  7. word 替换 增加引号_如何在Word 2013文档中替换部分(不是全部)智能引号
  8. python 导入包 作用域_Python 包、模块、函数、变量作用域
  9. 前端模块化(二):模块化编程
  10. qt android文件读写文件,qt android 开发之写入xml配置文件篇
  11. go并发编程-理解不同并发场景下的go原语
  12. 限制会话id服务端不共享_【干货分享】Web安全漏洞深入分析及其安全编码
  13. 轻量级网络模型之ShuffleNet
  14. [ActiveForm] -- ActiveForm::begin表单用法
  15. 线程(一)伤害不大,侮辱性极强——idm与多人运动
  16. 如何设计一个吸引访问者的网站主页?
  17. 基于WeX5平台开发微信公众号中的在线问卷调查
  18. 路由器角色 ABR ASBR
  19. 严寒冰 国家计算机网络,北京航空航天大学计算机学院——严寒冰
  20. 苹果iphone4s英文系统怎么显示中文联系人?

热门文章

  1. Android开发入门教程1-开发环境的搭建
  2. C++实现费马小定理素数判定法和米勒拉宾素数判定算法生成大素数
  3. Python爬虫—BeautifulSoup
  4. openstack虚拟机配置vip
  5. CSS基础:移动端开发常识,多倍图初始化等
  6. OpenGL 驱动 与 扩展的关系
  7. awd的批量脚本 pwn_记一次AWD反杀之旅
  8. 随着无人机将承担更多的作战任务,“AI辅助空战”或将应运而生
  9. Kali——绕过杀毒软件检测工具Veil-Evasion
  10. Epicor 客制化 - 常用对象