题目
米小游抽原神u池已经好久没有歪啦!给大家来点小小的九连
不歪震撼!
图略
已知《原神》和《崩坏:星穹铁道》中的抽卡系统的概率如 下:
在未触发大保底机制时,每抽一发有p/2的概率抽到当期5 星,有p/2的概率抽到常驻5星,其余的1一p概率不出5星。 当抽到常驻5星后,触发了大保底机制,以后每抽一发有p的概率抽到当期5星,其余的1-p概率不出5星。
另外,当连续89抽未出5星时,下一抽必出5星。也就是说,若未触发大保底机制,本次抽卡1/2概率抽到当期5星,有1/2的概率抽到常驻5星:若已触发了大保底机制,则100%概率抽到当期5星。
现在给定了抽中5星的概率p。米小游想要抽到一张当期5星卡,她想知道抽卡次数的期望是多少?
输入描述
一个小数p(0<p<1),代表抽中5星的概率。
输出描述
一个浮点数,代表抽卡次数的期望。如果你的答案和正确答案的误差不超过 $10^6$ ,则以为答案正确。
示例
0.006
输出
104.5497057
解法(无误差)
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
static BigDecimal p = BigDecimal.ZERO;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
p = sc.nextBigDecimal();
System.out.println(
recursion(BigDecimal.ONE, BigDecimal.ONE)
.multiply(BigDecimal.valueOf(1.5))
.setScale(7, BigDecimal.ROUND_HALF_UP)
);
}
public static BigDecimal recursion(BigDecimal time, BigDecimal np) {
if (time.equals(BigDecimal.valueOf(90))) return np.multiply(BigDecimal.valueOf(90));
BigDecimal newNp = np.multiply(BigDecimal.ONE.subtract(p));
return recursion(time.add(BigDecimal.ONE), newNp).add(time.multiply(p).multiply(np));
}
}