题意:
解法:
因为每道题的答案是独立的,因此满足期望可加性.
设a[i]为第i道题的选项数,
对于第i道题:
1.如果a[i]>a[i-1]:
显然正确答案超过a[i-1]时一定不可能正确,
正确答案在[1,a[i-1]]之间的概率为a[i-1]/a[i],
填入的答案正确的概率为1/a[i-1].
因此答案正确的概率为a[i-1]/a[i]*(1/a[i-1])=1/a[i].
2.如果a[i]<a[i-1]:
显然选项超过a[i]时一定不可能正确,
选择在[1,a[i]]之间的概率为a[i]/a[i-1],
填入的答案正确的概率为1/a[i].
因此答案正确的概率为a[i]/a[i-1]*(1/a[i])=1/a[i-1].
综上得,对于第i道题,正确的概率为1/max(a[i],a[i-1]),
对于[1,n]的正确概率,累加起来就是回答正确的期望数量.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e7+5;
int n,A,B,C;
int a[maxm];
signed main(){
//input
cin>>n>>A>>B>>C>>a[1];
for(int i=2;i<=n;i++){
a[i]=(a[i-1]*A+B)%100000001;
}
for(int i=1;i<=n;i++){
a[i]=a[i]%C+1;
}
//
a[0]=a[n];
double ans=0;
for(int i=1;i<=n;i++){
ans+=min(a[i],a[i-1])*1.0/(a[i]*a[i-1]);
}
printf("%.3f\n",ans);
return 0;
}