洛谷 P1297 单选错位
作者:互联网
洛谷 P1297 单选错位
题目大意
给 \(n\) 个单选题和每个单选题的选项个数 \(a_i\),假设每道题目都选择了正确选项但第 \(i\) 道题目的答案抄到了答题纸上的第 \(i+1\) 道题目的位置上,特别地,第 \(n\) 道题目的答案抄到了第 \(1\) 道题目的位置上。
求期望做对多少题目。
题解
- 求做对题目的期望值,可以把每道题目作做对的期望值相加。
- 要想做对一道题目,它前一道题目的正确选项必须和这道题目的正确选项相同。
- 两道题目的选项组合共有 \(a_i\times a_{i-1}\)种,做对的情况有 \(\min(a_i,a_{i-1})\) 种,所以做对该题的几率为 \(\cfrac{\min(a_i,a_{i-1})}{a_i\times a_{i-1}}\)。
- 所以最后的答案就是:
代码
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int n, A, B, C, a[10000005];
double ans;
void in()
{
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;
}
void work()
{
a[n + 1] = a[1];//第n道抄到了第1道
for (int i = 2; i <= n + 1; i++)
ans += (double)min(a[i], a[i - 1]) / (double)a[i] / (double)a[i - 1];
printf("%.3lf", ans);
}
int main()
{
in();
work();
return 0;
}
标签:选项,洛谷,min,d%,P1297,times,单选,题目,include 来源: https://www.cnblogs.com/cymrain/p/14397344.html