思路:
其实每个位置的得分只和前一个位置有关。
而他们俩的所有情况的期望就是答案的这部分。 ——这是难想的,我期望学的不好。
(题目给的是每种情况的所有位置的和,全加起来是答案;我们算的是这个位置的所有情况的值)
然后每个位置和前一个位置的情况可以分三种:(其实就是上面大佬的题解分析)
ai == ai+1 对ai+1来说每次得分 1/ai
ai < ai+1 对ai+1来说 (当答案落在ai内时) ai/ai+1*(1/ai) == 1/ai+1
ai > ai+1 ai+1/ai * 1/ai+1 == 1/ai
代码:
int a[mx];
void solve(int c)
{
int n, A, B, C;
// for C/C++
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;
//
double ans = 0;
//n填到1
ans += 1.0 / (double)max(a[1], a[n]);
for (int i = 2; i <= n; i++)
{
ans += 1.0 / (double)max(a[i - 1], a[i]);
}
printf("%0.3lf", ans);
return;
}
signed main()
{
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t = 1;
//cin >> t;
for (int i = 1; i <= t; i++)
{
solve(i);
}
return 0;
}