• Luogu P1297 [国家集训队]单选错位 | 概率与期望


    题目链接

    题解:

    单独考虑每一道题目对答案的贡献。

    设$g_i$表示gx在第$i$道题目的答案是否正确(1表示正确,0表示不正确),则$P(g_i=1)$表示gx在第$i$道题目的答案正确的概率。

    我们要求的就是$sum_{i=1}^{n} P(g_i=1) imes 1$。

    那么我们该如何求解$P(g_i=1)$呢?

    首先,结合题目可以得出以下结论:

    设$s_i$为第i道题目的正确答案。

    若$g_i=1$,则有$s_i=s_{i-1}$。特别地,若$g_1=1$,则有$s_n=s_1$。

    反之亦然。

    (为了方便,以下文字先不考虑$i=1$的情况。)

    那么,对于每一个$s_i$,当$s_i=s_{i-1}$时,则有$1leqslant s_{i-1},s_ileqslant min(a_{i-1},a_i)$。

    在$s_i=s_{i-1}$的情况下,

    设$X=a_1 imes a_2 imes a_3 imes ... imes a_n,k=s_{i-1}=s_i$,那么对于每一个$k$,都会有$dfrac{X}{a_{i-1}a_i}$种可能的情况使$s_{i-1}=s_i=k$。

    因为$k$一共能取$min(a_{i-1},a_i)$个数,所以$s_{i-1}=s_i$的总情况数即为$min(a_{i-1},a_i)dfrac{X}{a_{i-1}a_i}$。

    又因为所有的情况一共有$X$种,所以$P(g_i=1)=dfrac{min(a_{i-1},a_i)dfrac{X}{a_{i-1}a_i}}{X}$。

    整理可得$P(g_i=1)=dfrac{1}{max(a_{i-1},a_i)}$。

    最后的答案即为$sum_{i=2}^{n} dfrac{1}{max(a_{i-1},a_i)}+dfrac{1}{max(a_n,a_1)}$。

    循环统计即可。

    代码:

    #include<iostream>
    #include<cstdio>
        using namespace std;
        int a[10000005];
    int main()
    {
        int n=0,A=0,B=0,C=0;
        scanf("%d%d%d%d%d",&n,&A,&B,&C,&a[1]);
        //按照题目所给的方式计算a[i] 
        for(int i=2;i<=n;i++) a[i]=((long long)a[i-1]*A+B)%100000001;
        for(int i=1;i<=n;i++) a[i]=a[i]%C+1;
        double ans=0;
        for(int i=1;i<=n;i++)//循环统计 
            if(i==1) ans+=1/(double)max(a[n],a[i]);//注意当i=1时要特判! 
                else ans+=1/(double)max(a[i-1],a[i]);
        printf("%.3f",ans);
        return 0;
    } 
  • 相关阅读:
    Mac 配置前端基本环境
    sass安装 使用
    SVG
    css规范
    [转载] Solaris命令使用
    solaris 10 基本使用
    dos taskkill 命令
    servicemix-3.2.1 内置的服务引擎和绑定组件
    servicemix-3.2.1 部署异常
    解析XML内容到User对象
  • 原文地址:https://www.cnblogs.com/wozaixuexi/p/9477513.html
Copyright © 2020-2023  润新知