zoukankan      html  css  js  c++  java
  • codeforces 235 B. Let's Play Osu!

    You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. For each click there are two outcomes: correct or bad. Let us denote correct as "O", bad as "X", then the whole play can be encoded as a sequence of n characters "O" and "X".

    Using the play sequence you can calculate the score for the play as follows: for every maximal consecutive "O"s block, add the square of its length (the number of characters "O") to the score. For example, if your play can be encoded as "OOXOOOXXOO", then there's three maximal consecutive "O"s block "OO", "OOO", "OO", so your score will be 22 + 32 + 22 = 17. If there are no correct clicks in a play then the score for the play equals to 0.

    You know that the probability to click the i-th (1 ≤ i ≤ n) click correctly is pi. In other words, the i-th character in the play sequence haspi probability to be "O", 1 - pi to be "X". You task is to calculate the expected score for your play.

    Input

    The first line contains an integer n (1 ≤ n ≤ 105) — the number of clicks. The second line contains n space-separated real numbersp1, p2, ..., pn (0 ≤ pi ≤ 1).

    There will be at most six digits after the decimal point in the given pi.

    Output

    Print a single real number — the expected score for your play. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.

    Sample test(s)
    input
    3
    0.5 0.5 0.5
    output
    2.750000000000000
    input
    4
    0.7 0.2 0.1 0.9
    output
    2.489200000000000
    input
    5
    1 1 1 1 1
    output
    25.000000000000000
    Note

    For the first example. There are 8 possible outcomes. Each has a probability of 0.125.

    • "OOO"  →  32 = 9;
    • "OOX"  →  22 = 4;
    • "OXO"  →  12 + 12 = 2;
    • "OXX"  →  12 = 1;
    • "XOO"  →  22 = 4;
    • "XOX"  →  12 = 1;
    • "XXO"  →  12 = 1;
    • "XXX"  →  0.

    So the expected score is 

    题解:http://www.w2bc.com/Article/20411

    code:

     1 #include<cstdio>
     2 using namespace std;
     3 int n;
     4 double ans,tmp,x;
     5 int main(){
     6     scanf("%d",&n);
     7     for (int i=1;i<=n;i++) scanf("%lf",&x),tmp*=x,ans+=2*tmp+x,tmp+=x;
     8     printf("%.10lf
    ",ans);
     9     return 0;
    10 }

    PS:好久没有写这么短的代码了

  • 相关阅读:
    raspberry pi 4 上Opencv-3.4.1编译安装与错误记录
    Ubuntu20.04上安装搜狗输入法(親測有效)
    Ubuntu20.04系统配置ROS-noetic环境
    Windows10和ubuntu20.04 LTS 双系统安装(ubuntu20.04)
    C++中构造函数的理解
    C++中函数模板的理解
    C++中重载函数的理解
    Gazebo9的进程死亡问题解决
    ROS常见问题及解决方法
    Moveit+Gazebo联合仿真问题解决
  • 原文地址:https://www.cnblogs.com/chenyushuo/p/4723504.html
Copyright © 2011-2022 走看看