• 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;
    }
  • 相关阅读:
    数据恢复
    InnoDB LRU优化
    STM32 M0之SPI
    C# 添加日志文件
    VCI_CAN二次开发摘机
    [一点感触]ADF4350 ADF4111混频记
    Linux札记
    C# String与Byte数组的转换
    STM32 CAN
    stm32 F40x CCM数据区的使用
  • 原文地址:https://www.cnblogs.com/Mohogany/p/13831708.html
Copyright © 2020-2023  润新知