Description

  worldwideD最近有午睡的习惯~某日中午,他做了一个梦:梦见有一个怪人,她去一个岛上住N+1天(编号为0到N)。这是在大洋中的岛,每天要么是晴天,要么刮台风。她到达岛的第0天是晴天(这样她才能上岸)。然后对于第i天,假如是晴天,那么有P(0<P≤1)的几率会变天:接下来连续M天都刮台风,然后第i+M+1天必然会转晴。天气对她的心情会有影响,用一个值来描述她每一天的心情:如果第i天是晴天,那么这个值为A;如果是雨天,那么岛上有D(0<D≤1)的几率会发生杀人案件,如果没发生杀人案件,这个值为B,否则为C。worldwideD醒来了,他想知道编号1到N天的心情值之和的期望值。

Input

 一行7个整数N,M,P,D,A,B,C,如题目所描述(其中给出的P,D是模998244353意义下的值)

Output

 一个整数,为答案。

Sample Input

Sample Input1

3 1 499122177 499122177 1 2 3

Sample Input2

233 23 372752072 54252411 10 20 22

Sample Output

Sample Output1

311951365

Sample Output2

651727164

Data Constraint

30%:N≤20
50%:N≤2,000
100%:1≤M≤N≤1,000,000 1≤A,B,C≤1,000 1≤P,D<998244353

Hint

样例一输出的值对应的实数是4.6875

Solution

  • 解决这道题如果直接计算总期望值的话,将会有些困难。

  • 于是我们转而先计算概率。设 F[i]F[i] 表示 第 ii 天是晴天的概率

  • 考虑第 i−1i-1 天的天气,如果是晴天,那么则有:

    F[i]+=F[i−1]∗(1−P)

    F[i]+=F[i-1]*(1-P)。

    • 如果是台风天,说明第 i−1i-1 天是连续台风天的第 mm 天,则第 i−m−1i-m-1 天必然是上一个晴天。

    • 则有:

      F[i]+=F[i−m−1]∗P

      F[i]+=F[i-m-1]*P

    • 初始化是:F[0]=1F[0]=1(第 0 天必定是晴天),于是就可以 O(N)O(N) 求出概率了。

    • 接着计算总期望,讨论第 ii 天的情况:

    • ①:是晴天,则期望为: F[i]∗AF[i]*A ;

    • ②:是台风天,则期望为: (1−F[i])∗(C∗D+B∗(1−D))(1-F[i])*(C*D+B*(1-D)) (杀人案件的期望);

    • 那么把这 N 天的①②两种期望全部相加即为答案,时间复杂度为 O(N)O(N) 。

    • 注意:所给的概率都是模意义下的,设给定的模数为 MoMo ,处理时都应模 MoMo 。

    • 若给的概率在模意义下为 xx ,则概率 1−x1-x 就等于 Mo+1−xMo+1-x ,证明略。

Code

#include<cstdio>
using namespace std;
const int mo=998244353;
int n,m;
long long p,d,a,b,c,ans;
long long f[1000001];
int main()
{scanf("%d%d%lld%lld%lld%lld%lld",&n,&m,&p,&d,&a,&b,&c);long long k=(c*d%mo+(mo+1-d)*b%mo)%mo;for(int i=f[0]=1,l=mo+1-p;i<=n;i++){f[i]=f[i-1]*l%mo;if(i-m-1>=0) f[i]=(f[i]+f[i-m-1]*p)%mo;ans=(ans+f[i]*a)%mo;ans=(ans+(mo+1-f[i])*k)%mo;}printf("%lld",ans);return 0;
}

JZOJ 5244. 【NOIP2017模拟8.8A组】Daydreamin ' (daydream)相关推荐

  1. jzoj5245 【NOIP2017模拟8.8A组】Competing Souls

    题意 有n个数a[i],现在有个指针i一直1..n,1..n的循环移动,每次指针移动到i时,a[i]可以在last+1..m中选一个数x,last是上一个被选的数,满足x<=a[i].并给ans ...

  2. JZOJ 5234. 【NOIP2017模拟8.7A组】外星人的路径

    Description 有一个外星人控制了你的大脑.一开始你处于原点(0,0).外星人有一个由(R,U,D,L)组成的长度为M 的操作序列,分别代表(右,上,下,左). 平面上有N 个关键点,每当外星 ...

  3. JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子

    Description Input Output Sample Input 7 9 39 6 13 2 22 6 7 4 -19 5 28 6 -17 1 2 1 3 2 4 1 5 4 6 2 7 ...

  4. JZOJ 5264. 【NOIP2017模拟8.12A组】化学

    Description Input Output Sample Input 3 10 1 2 10 Sample Output 5 Data Constraint Hint Solution 看到数据 ...

  5. JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿

    Description Input Output Sample Input 2 2 15 19 3 30 40 20 Sample Output 285 2600 Data Constraint So ...

  6. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨

    Description Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表 ...

  7. [jzoj5236]【NOIP2017模拟8.7A组】利普希茨

    这道像数据结构的结论题传送门 我觉得这断不能怪我 一上来给出操作种类和 LogLog 形式的数据范围有如套路一般 Solution 60p 容易想到分治 对于整个序列,可以割作三份,分界点为最大值和最 ...

  8. 利普希茨【NOIP2017模拟8.7A组】

    题目 Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表示操作的类型. t ...

  9. jzoj5236. 【NOIP2017模拟8.7A组】利普希茨

    Description Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表 ...

最新文章

  1. puppeteer php,puppeteer 页面爬取实例(元素遍历)
  2. SpringInAction--Spring Web应用之SpringMvc 注解配置
  3. python掌握程度怎么判断-想要学习人工智能需要掌握Python到什么程度
  4. IOS开发之----远程推送通知
  5. html底部自动加载下一页,js页面滚动到底部时自动加载下一页数据
  6. 函数头文件php_PHP 7.4 的 FFI 将支持更好地在 PHP 中使用 C 函数/数据结构
  7. 【报告分享】2022跨境电商行业趋势报告.pdf(附下载链接)
  8. 均值(Mean)和均值标准误差(S.E. Mean)
  9. 6 - VC Bound (P[BAD]的真正上限)
  10. DVWA中学习PHP常见漏洞及修复方法
  11. 使用框架建立富联网应用
  12. RTI_DDS自定义插件开发 10 官方案例
  13. ECharts地图省市县在对应地图的中心位置
  14. 什么是CDA数据分析师认证考试?
  15. 想要与北上争雄,深圳还有哪些课要补?| DT城数
  16. 关于多元正态分布向量表示的Notation问题
  17. Windows 10 Insider Preview ISO 下载地址
  18. 不可不知,专业名词解释
  19. Mac无法开机?如何修复并使其重新启动
  20. Huawei S5720-36C-EI-AC光电复用口遇到的问题

热门文章

  1. CPU所含有的寄存器
  2. android中关于点击屏幕,实现破碎的效果的实现
  3. Inception代码解读
  4. vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例
  5. caffe使用过程中遇到的一些问题错误
  6. 云炬60s看世界20211117
  7. 6 种激活函数核心知识点,请务必掌握!
  8. 机器学习中的MLE、MAP和贝叶斯估计
  9. 前深度学习时代CTR预估模型的演化之路 [王喆观点]
  10. 技术与管理并重才能走的更远