原题传送门
你跟我说这是蓝题?
顶多绿好吗
相邻两道题会对答案产生影响
a
[
i
]
与
a
[
i
+
1
]
a[i]与a[i+1]
a[i]与a[i+1]
总方案数为
a
[
i
]
∗
a
[
i
+
1
]
a[i]*a[i+1]
a[i]∗a[i+1]
概率为
1
a
[
i
]
∗
a
[
i
+
1
]
\frac{1}{a[i]*a[i+1]}
a[i]∗a[i+1]1
答案相同的方案数为
m
i
n
(
a
[
i
]
,
a
[
i
+
1
]
)
min(a[i],a[i+1])
min(a[i],a[i+1])
所以期望为
m
i
n
(
a
[
i
]
,
a
[
i
+
1
]
)
a
[
i
]
∗
a
[
i
+
1
]
\frac{min(a[i],a[i+1])}{a[i]*a[i+1]}
a[i]∗a[i+1]min(a[i],a[i+1])
加起来即可
Code:
#include <bits/stdc++.h>
using namespace std;
int n, A, B, C, a[10000010];
double d[10000010];
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) d[i] = a[i];
double ans = 0;
for (int i = 1; i < n; ++i) ans += min(d[i], d[i + 1]) / d[i] / d[i + 1];
ans += min(d[1], d[n]) / d[1] / d[n];
printf("%.3f\n", ans);
return 0;
}

博客给出LuoGu一道题的题解,指出相邻两道题会影响答案,分析了总方案数、概率、答案相同的方案数,得出期望为a[i]∗a[i+1]min(a[i],a[i+1]) ,最后将结果相加即可。
3133

被折叠的 条评论
为什么被折叠?



