蓝桥杯 爬树的甲壳虫

期望dp,但是过程是手推的

期望dp一般设置 fn=0,反推 f0,这样会容易理解一些

根据甲壳虫爬上一层有概率掉回第0层,得 fi

fi=1+pi+1f0+(1pi+1)fi+1

i=0,得:

f0=p1f0+(1p1)f1+1=p1f0+(1p1)[p2f0+(1p2)f2+1]+1=p1+p2(1p1)f0+(1p1)(1p2)f2+1+(1p1)=[p1+p2(1p1)+p3(1p1)(1p2)]f0+(1p1)(1p2)(1p3)f3+1+(1p1)+(1p1)(1p2)...=f0i=1npij=1i1(1pj)+fni=1n(1pi)+1+i=1n1j=1i(1pj)

则:

f0=1+i=1n1j=1i(1pj)1i=1npij=1i1(1pj)

所以只需要预处理 j=1i(1pj) 就可以了

N, mod = 100010, 998244353
n, a, b, p = 0, [0] * N, [0] * N, [0] * N

def qpow(x, k = mod - 2):
    res = 1
    while k > 0:
        if k % 2 == 1: res = res * x % mod
        x = x * x % mod
        k //= 2
    return res

def main():
    global n
    n = int(input())
    for i in range(1, n + 1):
        a[i], b[i] = map(int, input().split())
    s = [0] * N
    s[0] = 1
    for i in range(1, 1 + n):
        p[i] = a[i] * qpow(b[i])
        s[i] = s[i - 1] * (1 - p[i] + mod) % mod
    sum1, sum2 = 0, 0
    for i in range(1, n): sum1 = (sum1 + s[i]) % mod
    for i in range(1, n + 1): sum2 = (sum2 + p[i] * s[i - 1] % mod) % mod
    ans = (1 + sum1) * qpow(1 - sum2 + mod) % mod
    print(ans)

    

if __name__ == '__main__':
    main()

不过说一句,python运行效率是真慢,慢出c++ 10倍以上了。

posted @   BakaCirno  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示