zoukankan      html  css  js  c++  java
  • BZOJ4318——OSU!

    osu 是一款群众喜闻乐见的休闲软件。
    我们可以把osu的规则简化与改编成以下的样子:
    一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数, 这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)
    现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。
    输入
    第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。
    输出
    只有一个实数,表示答案。答案四舍五入后保留1位小数。
    样例输入
    3
    0.5
    0.5
    0.5
    样例输出
    6.0
    提示
    【样例说明】
    000分数为0,001分数为1,010分数为1,100分数为1,101分数为2,110分数为8,011分数为8,111分数为27,总和为48,期望为48/8=6.0
    【数据范围】
    N<=100000

    每次的贡献为

    (x+1)3x3=3x2+3x+1(x+1)^3-x^3=3x^2+3x+1

    所以我们每次单独维护x2x^2xx

    设每次的概率为p

    对于x有

    f1[x]=(f2[x1]+1)pf1[x]=(f2[x-1]+1)*p

    而对于x2x^2

    f2[x]=(f2[x1]+f1[x1]2+1)pf2[x]=(f2[x-1]+f1[x-1]*2+1)*p

    所以总的贡献就是g[x]=(g[x1]+3f2[x1]+3f1[x1]+1)pg[x]=(g[x-1]+3*f2[x-1]+3*f1[x-1]+1)*p

    #include<bits/stdc++.h>
    using namespace std;
    double f1[100005],f2[100005],dp[100005],rp;
    int n;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>rp;
            f1[i]=(f1[i-1]+1)*rp;
            f2[i]=(f2[i-1]+f1[i-1]*2+1)*rp;
            dp[i]=dp[i-1]+(3*f1[i-1]+3*f2[i-1]+1)*rp;
        }
        printf("%.1lf",dp[n]);
        return 0;
    }
    
  • 相关阅读:
    Django:RestFramework之-------视图
    Django:RestFramework之-------分页
    Django:RestFramework之-------序列化器
    Django:RestFramework之-------解析器
    Django:RestFramework之-------认证
    【WCF--初入江湖】02 WCF契约
    【WCF--初入江湖】01 WCF编程概述
    【WCF--初入江湖】目录
    【MongoDb--初入江湖】windows下安装MongoDb
    【Asp.Net-- 杂七杂八】的代码
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366480.html
Copyright © 2011-2022 走看看