zoukankan      html  css  js  c++  java
  • luogu P1365 WJMZBMR打osu! / Easy(期望DP)

    题目背景

    原 维护队列 参见P1903

    题目描述

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

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

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

    比如ooxxxxooooxxx,分数就是2×2+4×4=4+16=202 imes 2 + 4 imes 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基本上很少呢

    题解

    这个题有点意思。

    dp[i]代表到第i个位置总权值的期望。

    f[i]代表到第i个位置连续的o的长度。

    然后转移的时候分情况:

    s[i]=='x'

    dp[i]=dp[i-1];f[i]=0;

    s[i]=='o'

    dp[i]=(g[i-1]+1)^2=g[i-1]^2+2*g[i-1]+1=f[i-1]+2*g[i-1]+1;

    f[i]=f[i-1]+1;

    s[i]=='?'

    dp[i]=0.5*(f[i-1]+2*g[i-1]+1)+0.5*f[i-1];

    f[i]=(g[i-1]+1)*0.5+0*0.5;

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 const int N=300101;
     8 int n;
     9 char s[N];
    10 double dp[N],f[N];
    11 int main(){
    12     scanf("%d",&n);
    13     scanf("%s",s+1);
    14     for(int i=1;i<=n;i++){
    15         if(s[i]=='?'){
    16             f[i]=(f[i-1]+1.0)/2.0;
    17             dp[i]=dp[i-1]+0.5+f[i-1];
    18         }
    19         if(s[i]=='o'){
    20             f[i]=f[i-1]+1.0;
    21             dp[i]=dp[i-1]+2.0*f[i-1]+1.0;
    22         }
    23         if(s[i]=='x'){
    24             dp[i]=dp[i-1];
    25             f[i]=0.0;
    26         }
    27     }
    28     printf("%.4lf",dp[n]);
    29     return 0;
    30 }
  • 相关阅读:
    Oracle11g 干净卸载
    linux中的帮助命令
    Linux Samba文件共享服务,安装与案例配置
    linux文件系统相关命令(df/du/fsck/dumpe2fs)
    虚拟机VMware下CentOS6.6安装教程图文详解
    vnc连接远端linux服务器
    mysql57重新安装后无法再次启动mysql57服务“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动。”--解决方法
    (二)分布式数据库tidb-事务
    Centos 6下使用cmake编译安装MariaDB
    MySQL数据库基本知识
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/9606920.html
Copyright © 2011-2022 走看看