2134: 单选错位

题目大意:卷子上共用 N 道题目,对于题目 i,共有 ai 个选项,每个题只 能选择一个选项。现在把所有的正确选项都涂到了他的下一道 题上,问期望能做对多少道题目

由于一题只会对下一题产生影响且相互独立,

可以考虑求出一 道有 a 个选项的题写到有 b 个选项的题时的期望得分。

对于相邻两道题共有上面一个题有 ai 中选择方案,

下面一个题 有 aj 中正确的可能,共 ai × aj 种情况作为样本总量 对于做对的情况只有 min{ai , aj} 种、

把他们乘在一起再乘上 1 就是答案了。

总共 ai × aj种可能

可能成立的有$\min(a_i,a_j)$

所以

$\huge{ans=\sum^{n}_{i=1}\frac{1}{\max(a_i,a_{i+1})}}$

 

#include<cstdio>
#include<iostream>
using namespace std;
#define II int
#define DB double
II a[10005000];
II A,B,C;
II n;
DB ans;
int main()
{
    scanf("%d%d%d%d%d",&n,&A,&B,&C,&a[1]);
    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; 
    for(II i=1;i<=n;i++)
    {
        if(i==n)
            ans+=((DB)1/(DB)(max(a[n],a[1])));
        else
            ans+=((DB)1/(DB)max(a[i],a[i+1]));
    }
    printf("%.3lf",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/olinr/p/9416176.html