zoukankan      html  css  js  c++  java
  • tyvj P1952 Easy(递推+期望)

    P1952 Easy
    时间: 1000ms / 空间: 131072KiB / Java类名: Main

    描述

    某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(
    我们来简化一下这个游戏的规则
    有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有a*a分,comb就是极大的连续o。
    比如ooxxxxooooxxx,分数就是2*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了

    输入格式

    第一行一个整数n,表示点击的个数
    接下来一个字符串,每个字符都是ox?中的一个

    输出格式

    一行一个浮点数表示答案
    四舍五入到小数点后4位
    如果害怕精度跪建议用long double或者extended

    测试样例1

    输入

    4
    ????

    输出

    4.1250

    备注

    osu很好玩的哦
    WJMZBMR技术还行(雾),x基本上很少呢

    【思路】

           递推+期望。

           用f[i]表示前i个字符形成的期望,d[i]表示前i个字符最后形成连续的comp的期望长度。

    【代码】

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 const int N = 500000+10;
     6 
     7 double d[N],f[N];
     8 char s[N];
     9 int n;
    10 
    11 int main() {
    12     scanf("%d",&n);
    13     scanf("%s",s+1);
    14     for(int i=1;i<=n;i++)
    15     {
    16         if(s[i]=='x') 
    17             f[i]=f[i-1] , d[i]=0;
    18         else if(s[i]=='o')
    19             f[i]=f[i-1]+d[i-1]*2+1 , d[i]=d[i-1]+1;
    20         else
    21             f[i]=f[i-1]+d[i-1]+0.5 , d[i]=(d[i-1]+1)/2;
    22     }
    23     printf("%.4lf",f[n]);
    24     return 0;
    25 }

    ps:每个OJ都有自己奇葩的地方=-=

  • 相关阅读:
    斯坦福机器学习实现与分析之二(线性回归)
    理解Kalman滤波的使用
    浅谈程序优化
    2014年,我学到了什么
    运动目标跟踪中kalman滤波器的使用
    图像水波纹特效原理分析和实现
    Redis与memached的区别
    Freemarker讲解
    Java基础知识总结
    Java中GC的工作原理
  • 原文地址:https://www.cnblogs.com/lidaxin/p/5163448.html
Copyright © 2011-2022 走看看