A题目传送门
B题目传送门
C题目传送门

A

因为太水,我不想写题解,Yvehの传送门

B

思路:
很强的一道题目(聪哥说是概率入门题……)
昨天打比赛时懵逼了很久
我们先考虑一个简单的问题,如果a[i]=0a[i]=0,怎么做?
一道比较经典的题目(51nod 1202),给定序列ss,求不同的子序列个数
f[i]f[i]表示到第ii位时本质不同的子序列的个数,对于第i位来说有选和不选两种可能,那么方程就是

f[i]=f[i−1]×2

f[i]=f[i-1]×2
但这是在s[i]s[i]没有出现过的情况下的方程
那如果s[i]s[i]之前已经出现过呢?
设s[i]s[i]最后出现的位置是lastlast,那么方程就是

f[i]=f[i−1]×2−f[last−1]

f[i]=f[i-1]×2-f[last-1]
我们可以这么想,这时重复的串就是last之前的子序列分别与s[last]s[last],s[i]s[i]相匹配,这些子序列的数量就是f[last−1]f[last-1]
这样就可以在O(n)O(n)时间内递推出f[n]f[n]了
但是这里加入了概率,我们怎么在这上面改进呢?
我先给出方程,下面再解释
a[i]a[i]表示第i位被删除的概率,f[i]f[i]表示到第ii位时本质不同的子序列的期望,sum[i]sum[i]表示ii本身及ii所有可能的lastlast的前一位的期望的前缀和
咦,好像sum[i]sum[i]的定义很诡异啊,我们来重新断下句(。・∀・)ノ゙
sum[i]sum[i]表示
ii本身及ii所有可能的lastlast
的前一位
的期望
的前缀和
如果没看懂就继续往下看好了= =

f[i]=(f[i−1]×2−sum[last])×(1−a[i])+f[i−1]×a[i]

f[i]=(f[i-1]×2-sum[last])×(1-a[i])+f[i-1]×a[i]

sum[i]=f[i−1]×(1−a[i])+sum[last]×a[i]

sum[i]=f[i-1]×(1-a[i])+sum[last]×a[i]
考虑第ii位时,如果第ii位被删除了,那么第ii位的的期望就是前一位的期望(即f[i−1]f[i-1]),如果没被删除,那么就可以仿照a[i]=0a[i]=0时的情况了,但这时我们发现,last的位置并不是固定的,而是有多种可能的,在这里,朴素的想法是枚举所有可能的lastlast,然后累加它们的不被删除时前一位的ff,得出答案,但这个转移最坏情况下是O(n)O(n)的,所以考虑前缀和优化,sum[i]sum[i]就是做这个用的
sum[i]sum[i]的求法也很简单,类似f[i]f[i],如果ii没被删除,那就是f[i−1]f[i-1],反之就是sum[last]sum[last]
乘下相应的概率就可以了
由于要取模,所以先求下100100关于998244353998244353的逆元
时间复杂度和空间复杂度都是O(n)O(n)
代码:

#include<cstdio>
#include<iostream>
#define M 500003
#define mo 998244353
#define LL long long
using namespace std;
int n;
char s[M];
int a[M],last[27],f[M],sum[M];
int qr(int x,int y)
{int t=1;for (;y;y>>=1,x=(LL)x*x%mo)if (y&1) t=(LL)t*x%mo;return t;
}
main()
{scanf("%d",&n);scanf("%s",s+1);for (int i=1;i<=n;++i) scanf("%d",a+i);int inv=qr(100,mo-2);f[0]=1;for (int i=1;i<=n;++i){int t=sum[last[s[i]-'a']];f[i]=((100-a[i])*(2LL*f[i-1]%mo-t)%mo+(LL)a[i]*f[i-1]%mo)%mo*inv%mo;sum[i]=((LL)f[i-1]*(100-a[i])%mo+(LL)t*a[i]%mo)*inv%mo;last[s[i]-'a']=i;}printf("%d\n",(f[n]+mo)%mo);
}

C

因为太神太麻烦不想写题解了
Yvehの传送门

有没有被骗到啊(。・∀・)ノ

B题写这么详细已经很良心的啦QAQ

【hiho挑战赛24 ABC】贪心和期望dp惨烈的后缀自动机相关推荐

  1. 【hiho】127 后缀自动机一·基本概念 【后缀自动机】

    传送门:后缀自动机一·基本概念 后缀自动机(Suffix Automaton,简称SAM)是处理字符串的很强大的工具,对于一个字符串S,它对应的后缀自动机是一个最小的确定有限状态自动机(DFA),接受 ...

  2. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  3. string (KMP+期望DP)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description  给定一个由且仅由字符 'H' , 'T' 构成的字符串$S$. 给定一个最初为空的字符串 ...

  4. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

  5. 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]

    亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MB [Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了, ...

  6. 【BZOJ2553】禁忌,AC自动机+期望DP+矩乘

    传送门 先考虑选最多禁忌串的问题 感受一下,如果禁忌串之间没有包含关系,一定是可以从前往后贪心搞的,直接建AC自动机跑匹配,找到一个禁忌串的末尾就回到根上,并把禁忌串数量+1 (所以起初我想的是把包含 ...

  7. POJ 2096 Collecting Bugs:期望dp

    题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属 ...

  8. 【期望dp 质因数分解】cf1139D. Steps to One

    有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...

  9. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

最新文章

  1. transition标签_图解直到今天也没什么人知道的原生dialog标签(非常详细)
  2. Jquery性能优化(转自蓝色理想)
  3. python爬虫必会的23个项目
  4. Scala 闭包详解
  5. Two Arrays and Sum of Functions
  6. python模型预测_python:目标检测模型预测准确度计算方式(基于IoU)
  7. disk genius_如何预约Apple Store商店或Genius Bar
  8. 2021年全球知名开源项目大更新
  9. 详解两种C#自动实现DLL(OCX)控件注册的方法
  10. mysql存储过程in_在MySQL存储过程中使用WHERE IN()
  11. scapy python_Scapy在Python脚本中
  12. OpenCV版本与EmguCV版本匹配问题
  13. 关于引力波的一些疑问
  14. python可变参数_Python学习之路:函数传递可变参数与不可变参数,每天学一点点...
  15. 计算机广告制作教程,Photoshop实例教程:制作网站横条广告
  16. 怎么用ps做一个黑底白字_ps怎么把白底黑字变成黑底白字
  17. 3. 二叉哥的二叉树
  18. 华为交换机常用查看命令
  19. mysql数据库表空间压缩,表空间中有数据也可以压缩表空间(数据文件)大小!!...
  20. 【网络时间同步】基于马尔科夫随机场最大后验估计和Gardner环的无线传感器网络时间同步算法matlab仿真

热门文章

  1. 补习系列(2)-springboot mime类型处理
  2. 【Python3网络爬虫开发实战】3.4-抓取猫眼电影排行
  3. 大前端的自动化工厂(3)—— babel
  4. 分布式数据库DDM Sidecar模式负载均衡
  5. Kotlin学习笔记 第二章 类与对象 第二节属性
  6. php无法连通mysql_怎么解决php无法连接mysql的问题
  7. ubuntu下安装模拟环境carla
  8. python开发mes系统_MES系统开发
  9. python3 循环语句 for语句和while语句
  10. mongodb更新操作符