luogu P1297概率与期望 [国家集训队]单选错位
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1297概率与期望 [国家集训队]单选错位相关的知识,希望对你有一定的参考价值。
单选错位
题目
// for pascal
readln(n,A,B,C,q[1]);
for i:=2 to n do
q[i] := (int64(q[i-1]) * A + B) mod 100000001;
for i:=1 to n do
q[i] := q[i] mod C + 1;
// 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;
输入
3 2 0 4 1
输出
1.167
解题思路
错位后是否是相同的?
前一位有 Ai 个答案,每一个答案都有
1
A
i
\\frac1Ai
Ai1 的概率被选中
后一位有 Ai + 1 个答案,每一个答案都有
1
A
i
+
1
\\frac1Ai + 1
Ai+11 的概率被选中
那么两个题重叠选项是 min(Ai, Ai+1)
那么在Ai 和 Ai+1中选中同一个数的概率为
1
A
i
∗
1
A
i
+
1
∗
m
i
n
(
A
i
,
A
i
+
1
)
\\frac1Ai * \\frac1Ai + 1 * min(Ai, Ai+1)
Ai1∗Ai+11∗min(Ai,Ai+1)
Code
#include <bits/stdc++.h>
using namespace std;
int n, A, B, C, a[10001000];
long double ans;
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;
a[n + 1] = a[1];
for(int i = 1; i <= n; i ++)
ans = ans + min(a[i], a[i + 1]) * 1.0 / (1.0 * a[i] * a[i + 1]);
printf("%.3Lf", ans);
以上是关于luogu P1297概率与期望 [国家集训队]单选错位的主要内容,如果未能解决你的问题,请参考以下文章
Luogu P1297 [国家集训队]单选错位 | 概率与期望