zoukankan      html  css  js  c++  java
  • GMOJ 6824. 【2020.10.17提高组模拟】英雄联盟(lol)

     这是这套题中最水的一题,考场我的做法是用一个期望概率dp,计算出砍100000次刀之后的值,然后可以发现:

    从10000增长到100000,从100000到1000000,增长的数每次是上一次的10^-1倍,然后就可以用等比数列求和做出来。

    正解是设每砍i刀暴击一次的期望是s[i],则有s[i]=(1-x)*(1-2*x)*...*(1-(i-1)*x)*(k*x)*i;

    那么最后的答案就是1/(sigma(s[i]))

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define db double
    #define N 2000000
    using namespace std;
    int n,x,i,k;
    db sum[N],ans;
    int main(){
        freopen("lol.in","r",stdin);
        freopen("lol.out","w",stdout);
        scanf("%d",&x);
        k=100/x;
        if (100%x==0) k--;
        sum[0]=1;
        for (i=1;i<=k;i++)
            sum[i]=(db)sum[i-1]*(1-(db)x*i/100);
        ans=0;
        for (i=1;i<=k+1;i++)
            ans+=(db)sum[i-1]*((db)min(x*i,100)/100)*i;
        printf("%.10lf
    ",1/ans);
        return 0;
    }
  • 相关阅读:

    队列
    数据结构简介
    标准模板库
    类模板
    函数模板
    srvctl error
    FLASH BACK
    RAC 设置archive log模式
    CHAPTER 1 Architectural Overview of Oracle Database 11g
  • 原文地址:https://www.cnblogs.com/Mohogany/p/13831708.html
Copyright © 2011-2022 走看看