题目背景

原 维护队列 参见P1903

题目描述

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

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

有 nnn 次点击要做,成功了就是o,失败了就是x,分数是按combo计算的,连续 aaa 个combo就有 a×aa\times aa×a 分,combo就是极大的连续o

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

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

比如oo?xx就是一个可能的输入。 那么WJMZBMR这场osu的期望得分是多少呢?

比如oo?xx的话,?o的话就是oooxx => 9,是x的话就是ooxxx => 4

期望自然就是 (4+9)/2=6.5(4+9)/2 =6.5(4+9)/2=6.5 了

输入输出格式

输入格式:

第一行一个整数 nnn ,表示点击的个数

接下来一个字符串,每个字符都是o,x,?中的一个

输出格式:

一行一个浮点数表示答案

四舍五入到小数点后 444 位

如果害怕精度跪建议用long double或者extended

输入输出样例

输入样例#1:

4
????
输出样例#1:

4.1250

说明

osu很好玩的哦

WJMZBMR技术还行(雾),x基本上很少呢

Solution:

  期望题总是贼有意思。

  本题期望combo为$o$的期望连续长度的平方,所以我们设$f[i]$表示到了第$i$位的总期望combo,$g[i]$表示到了第$i$位结尾的连续$o$的期望长度,那么分情况讨论:

  1、当$s[i]==x$,则$f[i]=f[i-1],g[i]=0$;

  2、当$s[i]==o$,则$f[i]=f[i-1]+2*g[i-1]+1,g[i]=g[i-1]+1$($f[i]=f[i-1]+2*g[i-1]+1$是因为$f[i]=(g[i-1]+1)^2=g[i-1]^2+2*g[i-1]+1\;,\;g[i-1]^2=f[i-1]$);

  3、当$s[i]==?$,则$f[i]=f[i-1]+g[i-1]+0.5,g[i]=\frac{g[i-1]+1}{2}$;

  由于不知道$n$的范围,不好开数组,但是我们发现转移时当前的状态只与上一次的状态有关,于是直接滚掉就好了。

代码:

#include<bits/stdc++.h>
#define il inline
#define ll long long
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
using namespace std;
int n,cnt;
char s;
double f[],g[]; int main(){
ios::sync_with_stdio();
cin>>n;
For(i,,n){
cin>>s;
if(s=='x') f[cnt^]=f[cnt],g[cnt^]=;
else if(s=='o') f[cnt^]=f[cnt]+*g[cnt]+,g[cnt^]=g[cnt]+;
else f[cnt^]=f[cnt]+g[cnt]+0.5,g[cnt^]=g[cnt]/+0.5;
cnt^=;
}
printf("%.4lf",f[cnt]);
return ;
}

P1365 WJMZBMR打osu! / Easy的更多相关文章

  1. 洛谷 P1365 WJMZBMR打osu! / Easy

    题目背景 原 维护队列 参见P1903 题目描述 某一天\(WJMZBMR\)在打\(osu~~~\)但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有\(n\)次点击要做,成功 ...

  2. luogu P1365 WJMZBMR打osu! / Easy(期望DP)

    题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有nnn次点击要做,成功了就是o,失败了就是 ...

  3. 洛谷P1365 WJMZBMR打osu! / Easy——期望DP

    题目:https://www.luogu.org/problemnew/show/P1365 平方和怎样递推? 其实就是 (x+1)^2 = x^2 + 2*x + 1: 所以我们要关注这里的 x — ...

  4. Luogu P1365 WJMZBMR打osu! / Easy

    概率期望专题首杀-- 毒瘤dp 首先根据数据范围推断出复杂度在O(n)左右 但不管怎么想都是n^2-- 晚上躺在床上吃东西的时候(误)想到之前有几道dp题是通过前缀和优化的 而期望的可加性又似乎为此创 ...

  5. WJMZBMR打osu! / Easy

    WJMZBMR打osu! / Easy 有一个由o,x,?组成的长度为n的序列,?等概率变为o,x,定义序列权值为连续o的长度o的平方之和,询问权值的期望, 解 注意到权值不是简单的累加关系,存在平方 ...

  6. P1365 WJMZBMR打osu! / Easy-洛谷luogu

    传送门 题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有nn次点击要做,成功了就是o,失败 ...

  7. [Luogu1365] WJMZBMR打osu! / Easy

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

  8. 洛谷 1365 WJMZBMR打osu! / Easy

    题目:https://www.luogu.org/problemnew/show/P1365 大水题.记录一下o的期望长度. 关键是(x+1)^2=x^2+2*x+1. #include<ios ...

  9. [BZOJ4318] WJMZBMR打osu! / Easy (期望DP)

    题目链接 Solution Wa,我是真的被期望折服了,感觉这道题拿来练手正好. DP的难度可做又巧妙... 我们定义: \(f[i]\) 代表到第 \(i\) 次点击的时候的最大答案. \(g[i] ...

随机推荐

  1. 用label实现横向瀑布流的方法

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAKxCAIAAAAn+3udAAAKqWlDQ1BJQ0MgUHJvZmlsZQAASImVlg

  2. linux 中文输出

    #include <stdio.h> #include <stdlib.h> #include <string> #include <fstream> ...

  3. php常用几个数组的区别

    本文主要介绍的php数组函数主要有:sort.rsort.asort.arsort.ksort.krsort 测试数据定义一个关联数组如下: $data=[ 'f'=>123, 'b'=> ...

  4. Java Swing学习笔记——创建JFrame

    创建显示一个空JFrame import javax.swing.JFrame; public class JFrameDemo extends JFrame{ public JFrameDemo() ...

  5. 编写你自己的Python模块

    其实网上Python教程挺多的,编写你自己的模块很简单,这其实就是你一直在做的事情!这是因为每一个 Python 程序同时也是一个模块.你只需要保证它以 .py 为扩展名即可.下面的案例会作出清晰的解 ...

  6. 微信小程序入门学习之事件 事件对象 冒泡非冒泡事件(1)

    这关于事件的学习,可以自己复制到微信开发者工具上自己运行试试. 首先这里有两个文件.js 和.wxml 文件 首先给出.js文件下代码 // pages/news/news.js Page({ /** ...

  7. 【form】 表单组件说明

    form表单组件 1)将form组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/ ...

  8. JSON.parse() 与 eval()

    JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是Javascript原生格式,这意味着在ja ...

  9. C++错误:Process returned -1073741571 (0xC00000FD)

    最近写程序时,需要将一个一维数组编程二维数组,很简单,写完之后,运行错误! 提示:Process returned -1073741571 (0xC00000FD) 刚开始写的代码如下: #inclu ...

  10. linux 命令行基础

    命令行基础 一些名词 「图形界面」 「命令行」 「终端」 「shell」 「bash」 安装使用 Windws: 安装git, 打开 gitbash Linux 打开终端 Mac 打开终端 基本命令 ...