• Tyvj1952 Easy


     

    题目描述

    某一天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

    样例输入

    4

    ????

    样例输出

    4.1250

     

     

    n<=300000

    osu很好玩的哦

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

    solution:

    这题跟OSU!一样
    
    就把^3改成^2
    p[ o ]=1.0
    p[ x ]=0
    p[ ? ]=0.5

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #define mem(a,b) memset(a,b,sizeof(a))
     5 #define dd double
     6 #define ll long long
     7 #define ld long double
     8 using namespace std;
     9 const int N=300100;
    10 int readchar()
    11 {
    12     char q=getchar();
    13     while(q!='o'&&q!='x'&&q!='?')q=getchar();
    14     return q;
    15 }
    16 
    17 int n;
    18 ld p[N];
    19 ld l[N],l2[N],f[N];
    20 double temp;
    21 char s;
    22 
    23 int main(){
    24     scanf("%d",&n);
    25     for(int i=1;i<=n;++i)
    26     {
    27       s=readchar();
    28       if(s=='o')p[i]=1.0;
    29       else if(s=='x')p[i]=0;
    30       else p[i]=0.5;
    31     }
    32     for(int i=1;i<=n;++i)
    33     {
    34         l[i]=(l[i-1]+1.0)*p[i];
    35         f[i]=f[i-1]+(2.0*l[i-1]+1.0)*p[i];
    36     }
    37     temp=f[n];
    38     printf("%.4lf",temp);
    39     //while(1);
    40     return 0;
    41 }
    42     
    View Code
  • 相关阅读:
    跨域
    redis安装
    iframe操作
    element-ui 合并相邻的相同行 span-method
    函数实现 a?.b?.c?.d
    git 使用流程 命令
    svg用作背景图
    js中的位运算符 ,按位操作符
    二十三种设计模式[23]
    二十三种设计模式[22]
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7247443.html
Copyright © 2020-2023  润新知