[闲聊] LeetCode 458

楼主: SecondRun (雨夜琴声)   2023-01-07 22:44:19
458. 可怜的猪
给定b个水桶,其中一桶有毒
给定md为吃下毒到毒发作所需时间
你可以用以下步骤找到哪桶是毒
1.喂猪,每次实验中一桶水桶可以喂很多猪,一只猪也可以吃很多水桶
2.等待一段时间
3.看哪只猪死了就可以缩小毒桶的范围
给定mt为找到毒桶的时间限制
试问你最少需要多少只猪才能把毒桶找出来?
ex. 自己看
https://i.imgur.com/Hfhnl7B.png
思考
如果我只有一只猪
就只能一桶一桶试,最多b-1轮实验可以找出来
(总共b桶且一定有一桶有毒
那么前面b-1桶都没死可以直接得到第b桶是有毒的结论)
而如果我有两只猪
那就可以把水桶排成一个二维阵列,一只猪每次一列,一只猪每次一排
然后就像是一只猪的case一样可以特定出哪一列哪一排得出答案
而三只猪的情况
可以把水桶排成三维阵列,每只猪分别对应一个dimension
依此类推
可以得到 (round+1)^pigs >= buckets 时,可以找出毒桶
取ln => ln((round+1)^pigs) >= ln(buckets)
=> pigs >= ln(buckets)/ln(round+1)
C#
https://i.imgur.com/jGjEKYw.png
结果错了
打log出来发现
毕竟ln是无理数,拿来除会因为精度问题会有微小的误差
这时再取ceiling就爆开了
C#
https://i.imgur.com/qOSj87C.png
这种情况不整理式子,让变量都保持在int的情况去运算会更好
作者: PyTorch (屁眼火炬)   2022-01-07 22:44:00
大师
作者: ririoshi (角落住民)   2023-01-07 22:45:00
大师
作者: Che31128 (justjoke)   2023-01-07 23:00:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com