抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

题目

米小游抽原神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));  
    }  
}

评论