P1297 单选错位
这是一道我们的考试题
题意:
gx把第\(i\) 题的答案涂到了 \(i+1\) 上 让我们求出gx 答对的期望
前置芝士
期望
定义:试验中每次可能结果的概率乘以其结果的总和(来自百度某科 滑稽)
性质:\(E(ax+by)\) = \(xE(a)\) * \(yE(b)\)
计算式: \(E(x)\) = \(\sum_{i=1}^{\infty}\) \(w_i * p_i\)
solution
每个题的选项不同,考虑分情况讨论。
- 当两个题的选项数相同时,gx答对的概率为\({1} \over {a_i}\)
- 当前一道题的选项数大于后一道题时,gx答对的概率为 \({a_i+1} \over {a_i * a_i+1}\) = \({1} \over {a_i}\)
- 当后一道题的选项数大于前一道题时,gx答对的概率为 \({a_i} \over {a_i * a_i+1}\) = \({1} \over {a_i+1}\)
综上这道题的总柿子为 \({min(a_i , a_i+1)} \over {a_i * a_i+1}\) = \({1} \over {max(a_i,a_i+1)}\)
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,A,B,p;
int a[20000010];
double ans;
int main()
{
scanf("%d%d%d%d%d", &n, &A, &B, &p, 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] % p + 1;
a[n+1] = a[1];
for(int i = 1; i <= n; i++) ans += 1 / (double) max(a[i],a[i+1]);
printf("%.3lf",ans);
return 0;
}