• Codeforces 1009E Intercity Travelling | 概率与期望


    题目链接

    题目大意:

    一个人要从$A$地前往$B$地,两地相距$N$千米,$A$地在第$0$千米处,$B$地在第$N$千米处。

    从$A$地开始,每隔$1$千米都有$dfrac{1}{2}$的概率拥有一个休息点, 如果这个地方有休息点的话,这个人就可以在此地休息,起点处(即第$0$千米处)一定是一个休息点。

    如果这个人在最近一次休息后行驶了$i$千米,那么他将有$sum_{j=1}^ia_i$疲劳值。

    给出$N$与$a_i(i$为整数且$iin[1,N])$,求这个人到达$B$地后拥有的疲劳值的期望,将其与$2^{N-1}$的积模$998244353$后输出。

    题解:

    设$S_i$为从第$i-1$千米处到达第$i$千米处所产生的疲劳值的期望。

    考虑计算每个$S_i$,最后的答案即为$2^{n-1}cdotsum_{i=1}^NS_imod998244353$

    很明显的一点是,与$S_i$有关的即为到达第$i$千米处前最后一次休息的地方是哪里。

    对此,就会用$i-1$种可能的情况,

    分别是最后一次休息的地方在第$0$千米处,在第$1$千米处,在第$2$千米处……在第$i-1$千米处;

    这些情况的概率分别是$dfrac{1}{2^{i-1}}$,$dfrac{1}{2^{i-1}}$,$dfrac{1}{2^{i-2}}$$cdots$$dfrac{1}{2^1}$;

    在这些情况中,从第$i-1$千米处到达第$i$千米处所产生的疲劳值分别是$a_i$,$a_{i-1}$,$a_{i-2}$$cdots$$a_1$。

    注意:最后一次休息的地方在第$0$千米处的概率是$dfrac{1}{2^{i-1}}$而不是$dfrac{1}{2^i}$是因为第$0$千米处一定是一个休息点。

    于是就有$S_i=dfrac{a_i}{2^{i-1}}+dfrac{a_{i-1}}{2^{i-1}}+dfrac{a_{i-2}}{2^{i-2}}+cdots+dfrac{a_1}{2^1}$。

    那么对于$S_{i+1}$,就有$S_{i+1}=S_i-dfrac{a_i}{2^i}+dfrac{a_{i+1}}{2^i}$。

    然后,就可以在$O(n)$的时间内递推求出所有的$S_i$了。

    初始条件?显然有$S_1=a_1$。

    计算的时候不要忘记与$2^{N-1}$相乘以及取模。

    代码:

    #include<iostream>
    #include<cstdio>
        using namespace std;
        const long long mod=998244353;
        long long a[1000005],f[1000005],mi[1000005];
    int main()
    {
        int n=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
        mi[0]=1;
        for(int i=1;i<=n-1;i++) mi[i]=mi[i-1]*2%mod;//预处理出2的i次方 
        f[1]=mi[n-1-0]*a[1]%mod;//初始条件 
        long long ans=0;
        for(int i=1;i<=n-1;i++)
        {
            ans=(ans+f[i])%mod;//累加答案 
            f[i+1]=((f[i]-mi[n-1-i]*a[i]%mod+mod)%mod+mi[n-1-i]*a[i+1]%mod)%mod;//递推 
        }
        ans=(ans+f[n])%mod;//不要忘记加上最后这一项 
        printf("%I64d",ans);
        return 0;
    }

    参考资料:

    PikMike's blog —— Разбор Educational Codeforces Round 47

  • 相关阅读:
    #研发解决方案#研发协作平台CloudEngine
    人生做出的选择越多,友谊的小船翻得越快?
    告诉别人你是谁:边界的那些事儿
    如何从零开始搭建一个技术平台?
    Windows10 自动配置切换IP地址
    Human disease database
    R语言install.packages("jpeg")报错
    RStudio中,出现中文乱码问题的解决方案(修改文件编码)
    How do I run Adobe Flash on Chrome?
    RGB颜色查询对照表
  • 原文地址:https://www.cnblogs.com/wozaixuexi/p/9510891.html
Copyright © 2020-2023  润新知