其他分享
首页 > 其他分享> > 题解 P1297 [国家集训队]单选错位

题解 P1297 [国家集训队]单选错位

作者:互联网

题意简述

小 \(G\) 参加了一次考试,一共有 \(n\) 题,每题一分。第 \(i\) 道题有 \(a_i\) 个选项,小 \(G\) 原定每道题随机选择一个选项,但是她写在答题卡上时,第 \(i\) 题的答案抄到了第 \(i+1\) 题上(第 \(n\) 题抄到了第一题),问小 \(G\) 的期望得分,保留三位小数。

\(1 \leq n \leq 10^7,1 \leq a_i \leq 10^8\)。

Solution

考虑第 \(i\) 题得分的期望,最后总的期望得分就是每一题的期望得分的和,设上一题的选项有 \(last\) 个。

综上,每一题得分的期望为 \(\dfrac{1}{\max\{last,a_i\}}\),答案就全部加起来就可以了。

代码如下:

#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
const int N = 1e7 + 5;
int n ,A ,B ,C ,a[N]; double ans;
signed 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++)
		ans += (double)1.0 / max(a[i] ,a[i + 1]);
	ans += (double)1.0 / max(a[n] ,a[1]);
	printf("%.3f\n" ,ans);
	return 0;
}

标签:选项,last,题解,d%,单选,dfrac,期望,include,国家集训队
来源: https://www.cnblogs.com/Dragon-Skies/p/15222613.html