1. 题目
2. 题解
emmmm…XZY 期望学太差了,就来做模板题啦。
对于第 $i$个选项,它的答案与第 $i – 1$个选项的答案相同的概率是 $\frac 1 {a _ i \times a _ {i – 1}}$
然后有 $min(a _ i, a _ {i – 1})$种可能的答案。
所以第 $i$个选项对答案的贡献就是 $\frac {min(a _ i, a _ {i – 1})} {a _ i \times a _ {i – 1}}$
特殊处理一下第一个选项就行了。
代码:
#include <bits/stdc++.h>
#define NS (10000005)
using namespace std;
int n, A, B, C, a[NS];
double ans;
int main(int argc, char const* argv[])
{
scanf("%d%d%d%d%d", &n, &A, &B, &C, a + 1);
for (int i = 2; i <= n; i += 1) a[i] = (1ll * a[i-1] * A + B) % 100000001;
for (int i = 1; i <= n; i += 1) a[i] = a[i] % C + 1;
ans = (double)min(a[1], a[n]) / a[1] / a[n];
for (int i = 2; i <= n; i += 1)
ans += (double)min(a[i], a[i - 1]) / a[i] / a[i - 1];
printf("%.3f\n", ans);
return 0;
}
0 条评论