日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Hulu 2020年校招-算法题《Hulu杀》Python

發(fā)布時間:2023/12/16 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hulu 2020年校招-算法题《Hulu杀》Python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

已經(jīng)工作了,義務支援下一屆,哈哈,好久不刷題還真有點生疏。Hulu今年秋招的題目并不難,一共四個編程題,基本是在常規(guī)問題上的延伸。今天先整理第一個題目,其他題目后面有時間繼續(xù)整理。

問題描述:

Hulu殺

有 n 個葫蘆娃一起玩Hulu殺,他們被分為好人和壞人兩個陣營,打亂之后圍成一個圈,按照順時針序編號為 0~n-1 。然后隨機選定一個葫蘆娃,從他/她開始由1到m順時針報數(shù),數(shù)到m的人被殺,下一個人繼續(xù)從1報數(shù),如此循環(huán)直到剩下最后一個人,這個人所屬陣營獲得勝利。我們用一個整型數(shù)組a[i]=1表示i是好人,a[i]=0表示i是壞人;整型數(shù)組w[i]表示玩家i被選為起始位置的權重,即玩家i有w[i]/sum(w[i])的概率做起始位置。求好人獲勝的概率,四舍五入到小數(shù)點后五位數(shù)字(不足五位需要補零)

示例 1:
輸入:

# 第一行為2個空格分開的整數(shù),分別表示n和m # 第二行為n個空格分開的整數(shù),表示a[i] # 第二行為n個空格分開的整數(shù),表示w[i] # 輸入范圍0<m<n<=1000, 0<sum(w[i])<=10000000 ------------------------------------------- 3 2 0 0 1 2 1 1

輸出:

# 輸出一個浮點數(shù),表示好人獲勝的概率 ------------------------------------------- 0.50000

問題分析:

很顯然,這是一個經(jīng)典的約瑟夫環(huán)問題的延伸,只要在約瑟夫環(huán)問題求解基礎上,加上一層映射關系即可得出答案。具體思路如下:
(1)先求出以第一個人開始,最后剩下的人(也就是約瑟夫環(huán)求解)
(2)在(1)的基礎上求出每個起始位置,最后剩下的人(人)
(3)在(2)的基礎上求出每個起始位置對應的是好人獲勝還是壞人獲勝
(4)在(3)的基礎上求出每個起始位置對應的好人獲勝的概率(權重求和即可),然后計算:好人獲勝的概率(權重) / 總的概率(權重)即可得出答案。

注意: 輸出要求應該是字符串

Python實現(xiàn) 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):"""約瑟夫環(huán)問題求解: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位小數(shù))"""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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。