题目链接

题目大意:

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

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

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

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

题解:

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

考虑计算每个$S_i$,最后的答案即为$2^{n-1}\cdot\sum_{i=1}^NS_i\bmod998244353$

很明显的一点是,与$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

Codeforces 1009E Intercity Travelling | 概率与期望的更多相关文章

  1. 1009E Intercity Travelling 【数学期望】

    题目:戳这里 题意:从0走到n,难度分别为a1~an,可以在任何地方休息,每次休息难度将重置为a1开始.求总难度的数学期望. 解题思路: 跟这题很像,利用期望的可加性,我们分析每个位置的状态,不管怎么 ...

  2. CodeForces - 1009E Intercity Travelling

    题面在这里! 可以发现全是求和,直接拆开算贡献就好了 #include<bits/stdc++.h> #define ll long long using namespace std; c ...

  3. Codeforces D. Intercity Travelling(区间组合)

    题目描述: D. Intercity Travelling time limit per test 1.5 seconds memory limit per test 256 megabytes in ...

  4. CodeForces - 28C Bath Queue 概率与期望

    我概率期望真是垃圾--,这题搞了两个钟头-- 题意 有\(n\)个人,\(m\)个浴室,每个浴室里有\(a_i\)个浴缸.每个人会等概率随机选择一个浴室,然后每个浴室中尽量平分到每个浴缸.问期望最长排 ...

  5. Codeforces 1009 E. Intercity Travelling(计数)

    1009 E. Intercity Travelling 题意:一段路n个点,走i千米有对应的a[i]疲劳值.但是可以选择在除终点外的其余n-1个点休息,则下一个点开始,疲劳值从a[1]开始累加.休息 ...

  6. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  7. 【算法学习笔记】概率与期望DP

    本文学习自 Sengxian 学长的博客 之前也在CF上写了一些概率DP的题并做过总结 建议阅读完本文再去接着阅读这篇文章:Here 前言 单纯只用到概率的题并不是很多,从现有的 OI/ACM 比赛中 ...

  8. 【BZOJ-3450】Tyvj1952Easy 概率与期望DP

    3450: Tyvj1952 Easy Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 468  Solved: 353[Submit][Status] ...

  9. 【BZOJ-4008】亚瑟王 概率与期望 + DP

    4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 5 ...

随机推荐

  1. (转载)深入理解MDL元数据锁

    作者:MySQL技术本文为作者原创,转载请注明出处:https://www.cnblogs.com/kunjian/p/11993708.html 前言: 当你在MySQL中执行一条SQL时,语句并没 ...

  2. 华为云计算IE面试笔记-请描述华为容灾解决方案全景图,并解释双活数据中心需要从哪些角度着手考虑双活设计

    容灾全景图: 按照距离划分:分为本地容灾 同城容灾 异地容灾  本地容灾包括本地高可用和本地主备.(本数据中心的两机房.机柜) 本地高可用这个方案为了保持业务的连续性,从两个层面来考虑: ①一个是从主 ...

  3. RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed.

    RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed. 通过观察内存发现,数据加载过程中内存会被耗尽.

  4. C++学习笔记:07 类的继承与派生

    课程<C++语言程序设计进阶>清华大学 郑莉老师) 基本概念 继承与派生的区别: 继承:保持已有类的特性而构造新类的过程称为继承. 派生:在已有类的基础上新增自己的特性(函数方法.数据成员 ...

  5. Edit Step Ladders - UVA 10029

    题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...

  6. MySQL5.7.26二进制安装

    1.安装系统版本 2.解压更换路径 tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.26-linux-glibc2.12- ...

  7. DistSQL:像数据库一样使用 Apache ShardingSphere

    Apache ShardingSphere 5.0.0-beta 深度解析的第一篇文章和大家一起重温了 ShardingSphere 的内核原理,并详细阐述了此版本在内核层面,特别是 SQL 能力方面 ...

  8. Java JDK的下载与安装!Java基础

    在了解什么是Java.Java 语言的特点以及学习方法之后,本节将介绍如何搭建编写 Java 程序所需要的开发环境--JDK,只有搭建了环境才能敲代码! 学Java的都知道,JDK 是一种用于构建在 ...

  9. [云计算]Windows Server 2012 R2 配置AD/DNS/DHCP服务

    目录 一.前期准备 1.1 安装Windows Server 2012 R2 1.2 关闭防火墙 1.3 改变计算机名 1.4 挂载并安装Tools 1.5 重启并配置网卡 1.6 添加角色和功能 1 ...

  10. Oracle12C安装教程

    准备工作 网盘链接: https://pan.baidu.com/s/1gffHbOjImk1SfezdWO2Bpw 提取码: imft Oracle12C的安装 1.分别解压"winx64 ...