[Luogu1365] WJMZBMR打osu! / Easy
Description
某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(
我们来简化一下这个游戏的规则
有 \(n\) 次点击要做,成功了就是o,失败了就是x,分数是按combo计算的,连续 \(a\) 个combo就有 \(a\times a\) 分,combo就是极大的连续o。
比如ooxxxxooooxxx,分数就是 \(2 \times 2 + 4 \times 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 了
Input
第一行一个整数 n ,表示点击的个数
接下来一个字符串,每个字符都是o,x,?中的一个
Output
一行一个浮点数表示答案
四舍五入到小数点后 4 位
如果害怕精度跪建议用long double或者extended
Hint
\(N\leq 300000\)
Solution
显然期望 \(dp\) 的套路。定义两个数组 \(f[i],g[i]\) 分别表示到 \(i\) 的总得分和以 \(i\) 为结尾的 \(combo\) 长度。
如果当前是o 根据 \((x+1)^2=x^2+2x+1\),\(f[i]=f[i-1]+2*g[i-1]+1\),同时 \(g[i]=g[i-1]+1\)
如果当前是x \(f[i]=f[i-1],g[i]=0\)
如果当前是? 因为各有 \(0.5\) 的可能性,所以 \(f[i]=0.5*(f[i-1]+2*g[i-1]+1)+0.5*f[i-1],g[i]=0.5*(g[i-1]+1)+0.5*0\)
Code
#include<cstdio>
#define N 300005
#define db double
int n;
db f[N];
db g[N];
char ch[N];
signed main(){
scanf("%d",&n);
scanf("%s",ch+1);
for(int i=1;i<=n;i++){
if(ch[i]=='o'){
f[i]=f[i-1]+2*g[i-1]+1;
g[i]=g[i-1]+1;
} else if(ch[i]=='x'){
f[i]=f[i-1];
g[i]=0;
} else{
g[i]=(g[i-1]+1)/2.0;
f[i]=0.5*f[i-1]+0.5*(f[i-1]+2*g[i-1]+1);
}
}
printf("%.4lf\n",f[n]);
return 0;
}
[Luogu1365] WJMZBMR打osu! / Easy的更多相关文章
- WJMZBMR打osu! / Easy
WJMZBMR打osu! / Easy 有一个由o,x,?组成的长度为n的序列,?等概率变为o,x,定义序列权值为连续o的长度o的平方之和,询问权值的期望, 解 注意到权值不是简单的累加关系,存在平方 ...
- P1365 WJMZBMR打osu! / Easy
题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有 nnn 次点击要做,成功了就是o,失败了 ...
- 洛谷 P1365 WJMZBMR打osu! / Easy
题目背景 原 维护队列 参见P1903 题目描述 某一天\(WJMZBMR\)在打\(osu~~~\)但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有\(n\)次点击要做,成功 ...
- luogu P1365 WJMZBMR打osu! / Easy(期望DP)
题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有nnn次点击要做,成功了就是o,失败了就是 ...
- Luogu P1365 WJMZBMR打osu! / Easy
概率期望专题首杀-- 毒瘤dp 首先根据数据范围推断出复杂度在O(n)左右 但不管怎么想都是n^2-- 晚上躺在床上吃东西的时候(误)想到之前有几道dp题是通过前缀和优化的 而期望的可加性又似乎为此创 ...
- 洛谷 1365 WJMZBMR打osu! / Easy
题目:https://www.luogu.org/problemnew/show/P1365 大水题.记录一下o的期望长度. 关键是(x+1)^2=x^2+2*x+1. #include<ios ...
- [BZOJ4318] WJMZBMR打osu! / Easy (期望DP)
题目链接 Solution Wa,我是真的被期望折服了,感觉这道题拿来练手正好. DP的难度可做又巧妙... 我们定义: \(f[i]\) 代表到第 \(i\) 次点击的时候的最大答案. \(g[i] ...
- 洛谷P1365 WJMZBMR打osu! / Easy——期望DP
题目:https://www.luogu.org/problemnew/show/P1365 平方和怎样递推? 其实就是 (x+1)^2 = x^2 + 2*x + 1: 所以我们要关注这里的 x — ...
- P1365 WJMZBMR打osu! / Easy-洛谷luogu
传送门 题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有nn次点击要做,成功了就是o,失败 ...
随机推荐
- Linux学习笔记:常用软件
Linux系统下常用软件(针对CentOS,其他系统类似) lrzsz 可用于上传和下载,安装 yum -y install lrzsz ,使用 上传 rz 下载 sz mysql 安装 yum -y ...
- 《Miracle-House团队》第三次作业:团队项目的原型设计与开发
一.实验目的与要求 1.掌握软件原型开发技术 2.学习使用软件原型开发工具 二.实验内容与步骤 1.开发工具: 使用的工具:墨刀(APP端开发原型) 工具简介: 墨刀(MockingBot)是一款简单 ...
- hadoop 有那些发行版本
hadoop发行版本 1. apache hadoop http://hadoop.apache.org/ 2. cloudera hadoop(CDH) https://www.cloudera. ...
- 561.数组拆分I
题目:给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大. ...
- CPP全面总结(涵盖C++11标准)
OOP之类和对象 1. this指针的引入 每个成员函数都有一个额外的隐含的形参,这个参数就是this指针,它指向调用对象的地址.默认情况下,this的类型是指向类类型非常量版本的常量指针.可以表示成 ...
- 单源最短路径算法——Bellman-ford算法和Dijkstra算法
BellMan-ford算法描述 1.初始化:将除源点外的所有顶点的最短距离估计值 dist[v] ← +∞, dist[s] ←0; 2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V ...
- 关于Linux MongoDB的安装
前一篇博文讲解了如何安装与配置MongoDB的windows版,本篇博文接着上一篇讲解如何在Linux系统中安装与配置MongoDB,为了演示,我问同事要了它的云服务器用于演示,当然我自己也有,但是已 ...
- 《http权威指南》读书笔记3
概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...
- MySQL:索引
索引的目的在于提高查询效率,它的作用就相当于一本书的目录: 1. 常见的索引模型 1.1 哈希表 优点:适用于等值查询的场景: 缺点:范围查询效率较低: 1.2 有序数组 优点:范围查询和等值查询效率 ...
- Excel设置excel打印每页都有表头标题
Excel设置excel打印每页都有表头标题