洛谷P1297 单选错位——期望
题目:https://www.luogu.org/problemnew/show/P1297
读懂题后就变得很简单啦;
对于一个问题和它的下一个问题,我们考虑:
设上一个问题有 a 个选项,下一个问题有 b 个选项;
那么上一道题中选到每个选项的概率是 1/a;
下面对应正确的概率是 1/b;
则总期望是 1/a * 1/b * min(a,b);
也就是 1/max(a,b)。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; int const maxn=10000005; int n,a[maxn],A,B,C; double 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(int i=1;i<n;i++) ans+=(double)1/(max(a[i],a[i+1])); ans+=(double)1/(max(a[1],a[n])); printf("%.3lf\n",ans); return 0; }