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;
}

 

posted @ 2018-08-03 20:33  olinr  阅读(139)  评论(0编辑  收藏  举报