博客要开始更新了。毕竟noip也算过去了。
这差不多又是一道数学题,我们这样考虑:
对于一道答案有a种情况,会选b种可能的题,两两排一下,一共有ab种情况,而符合条件的只有min(a,b)种,那么,期望为(1/ab)*min(a,b),也就是1/max(a,b)。
之后就是O(n)累加就好了。
#include<bits/stdc++.h>
#define N 10000000
using namespace std;
int n,A,B,C,a[N+5];
double ans;
int main()
{
freopen("in.txt","r",stdin);
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;
a[0]=a[n];
for(int i=1;i<=n;i++)ans+=(double)1/max(a[i],a[i-1]);
printf("%.3f",ans);
return 0;
}