题目大意:卷子上共用 N 道题目,对于题目 i,共有 ai 个选项,每个题只 能选择一个选项。现在把所有的正确选项都涂到了他的下一道 题上,问期望能做对多少道题目
由于一题只会对下一题产生影响且相互独立,
可以考虑求出一 道有 a 个选项的题写到有 b 个选项的题时的期望得分。
对于相邻两道题共有上面一个题有 ai 中选择方案,
下面一个题 有 aj 中正确的可能,共 ai × aj 种情况作为样本总量 对于做对的情况只有 min{ai , aj} 种、
把他们乘在一起再乘上 1 就是答案了。
可能成立的有$\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; }