描述

某一天 WJMZBMR 在打 osu~~~ 但是他太弱逼了,有些地方完全靠运气:(

我们来简化一下这个游戏的规则:

有 \(n(n\le 300000)\) 次点击要做,成功了就是 o,失败了就是 x,分数是按 comb 计算的,连续 \(a\) 个 comb 就有 \(a^2\) 分,comb 就是极大的连续 o

比如 ooxxxxooooxxx,分数就是 \(2\times 2+4\times 4=4+16=20\)。

Sevenkplus 闲的慌就看他打了一盘,有些地方跟运气无关要么是 o 要么是 x,有些地方 o 或者 x 各有 \(50\%\) 的可能性,用 ? 号来表示。

那么 WJMZBMR 这场 osu 的期望得分是多少呢?

思路:

这个题如果一段一段的处理,实际上并不是很好做。我们观察到 \((x + 1) ^ 2 - x ^ 2 = 2x + 1\),那么根据期望的线性性质,我们可以单独算每一个字符的贡献。我们设 \(dp_i\) 为考虑前 ii 个字符的期望得分,\(l_i\) 为以 \(i\) 为结尾的 comb 的期望长度,\(Comb_i\) 为第 \(i\)个字符,那么有 3 种情况:

  1. \(s_i = o\) ,则 \(dp_i = dp_{i - 1} + l_{i - 1} * 2 + 1,l_i = l_{i - 1} + 1\)
  2. \(s_i = x\) ,则 \(dp_i = dp_{i - 1}\)
  3. \(s_i =\ ?\), 则 \(dP_i = dp_{i - 1} + \frac{l_i*2 + 1}{2},l_i = \frac{l_{i - 1} + 1}{2}\)

对于前两种情况,其实是非常直观的,对于第三种情况,实际上是求了一个平均长度。例如 ?oo,两种情况的长度 \(l_i\) 分别为 \([0,1,2]\) 和 \([1,2,3]\) ,但是求了平均之后,长度 \(l_i\) 变成了 \([0.5,1.5,2.5]\) ,这样由于我们的贡献是一个关于长度的一次多项式 \((2x + 1)\) ,所以长度平均之后,贡献也相当于求了一个平均,自然能够求得正确的得分期望。

【AC Code】

const int N = 3e5 + 10;
double dp[N], Comb[N];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n; string s;
cin >> n >> s;
for (int i = 0; i < n; ++i) {
if (s[i] == 'o') {
dp[i] = dp[i - 1] + Comb[i - 1] * 2 + 1;
Comb[i] = Comb[i - 1] + 1;
} else if (s[i] == 'x') {
dp[i] = dp[i - 1];
Comb[i] = 0;
} else {
dp[i] = dp[i - 1] + (Comb[i - 1] * 2 + 1) / 2;
Comb[i] = (Comb[i - 1] + 1) / 2;
}
}
cout << setprecision(4) << fixed << dp[n - 1];
}

思考:如果长度为 \(a\) 的 comb 的贡献为 \(a^3\) 时该如何解决?题目链接:Here

Tips:由于 \((a + 1)^3 - a^3 = 3a^3 + 3a + 1\) ,所以我们要维护 \(a^2\) 和 \(a\) 的期望,注意 \(E_{a^2} \not= E^2_a\),所以维护 \(a^2\) 的期望是必要的。

BZOJ 3450 - Tyvj1952 Easy (期望DP)的更多相关文章

  1. BZOJ 3450 Tyvj1952 Easy ——期望DP

    维护$x$和$x^2$的期望递推即可 #include <map> #include <ctime> #include <cmath> #include <q ...

  2. Bzoj 3450: Tyvj1952 Easy (期望)

    Bzoj 3450: Tyvj1952 Easy 这里放上题面,毕竟是个权限题(洛谷貌似有题,忘记叫什么了) Time Limit: 10 Sec Memory Limit: 128 MB Submi ...

  3. bzoj 3450 Tyvj1952 Easy (概率dp)

    3450: Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败 ...

  4. Bzoj 3450: Tyvj1952 Easy 期望/概率,动态规划

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

  5. bzoj4318 OSU!和bzoj 3450 Tyvj1952 Easy

    这俩题太像了 bzoj 3450 Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点 ...

  6. 【BZOJ3450】Tyvj1952 Easy 期望DP

    [BZOJ3450]Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是 ...

  7. BZOJ 3450 Tyvj1952 Easy(期望)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3450 [题目大意] 给出一个字符串,包含o,x和?,一个字符串的得分为 每段连续的o的 ...

  8. BZOJ 3450: Tyvj1952 Easy [DP 概率]

    传送门 题意:$ox?$组成的序列,$?$等概率为$o\ or\ x$,得分为连续的$o$的长度的平方和,求期望得分 一开始没想出来,原因在于不知道如何记录长度 其实我们同时求得分和长度的期望就好了 ...

  9. BZOJ 3450: Tyvj1952 Easy 数学期望

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  10. 【概率】BZOJ 3450:Tyvj1952 Easy

    Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连 ...

随机推荐

  1. Echarts 饼图,legend样式美化

    最后样式图: 实现代码: var myChart = echarts.init(document.getElementById('container')); let option = { /*{b}: ...

  2. springboot下添加日志模块和设置日志文件输出

    前言 日志的使用将通过SLF4J来使用,SLF4J(Simple Logging Facade for Java)是一个为Java应用提供简单日志记录的接口.它的主要目标是在不同的日志系统之间提供一个 ...

  3. [ABC268G] Random Student ID

    Problem Statement Takahashi Elementary School has $N$ new students. For $i = 1, 2, \ldots, N$, the n ...

  4. gridlayout

    <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...

  5. 数据仓库主流开发语言——SQL

    数仓开发语言概述  SQL语言介绍 数仓与SQL 结构化数据 二维表结构 SQL语法分类

  6. 安装Tensorflow-gpu版本

    下载cuda 链接:https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch= ...

  7. 最后一次迭代——城院GO导航

    1. 程序运行截图展示: 2. 程序开发分工详情 葛方杰:负责地点汇总界面的前端基本界面设计以及上导航栏和侧导航栏的布局以及简单的数据绑定,以及做了自定义组件卡,用瀑布流的形式封装自定义组件卡来展现地 ...

  8. 【内核】kernel 热升级-1:kexec 机制

    内核热升级是指,预先准备好需要升级的内核镜像文件,在秒级时间内,完成内核切换,追求用户服务进程无感知. 欧拉操作系统提供了一套比较成熟的解决方案,该解决方案提供了用户态程序和内核态程序两部分: kex ...

  9. 解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

    已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~ 反思来源于对RAG下 ...

  10. JavaScript forEach 方法跳出循环

    for循环 JavaScript中,for循环可以使用 break 和 continue 来跳出: continue:跳出本次循环 break:结束循环 for (let i = 0; i < ...