ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BZOJ 3450 - Tyvj1952 Easy (期望DP)

2021-07-22 21:31:38  阅读:161  来源: 互联网

标签:3450 Comb 期望 int Tyvj1952 Easy 长度 comb dp


描述

某一天 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\) 的期望是必要的。

标签:3450,Comb,期望,int,Tyvj1952,Easy,长度,comb,dp
来源: https://www.cnblogs.com/RioTian/p/15046503.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有