洛谷 P1297 [国家集训队]单选错位(期望)

Posted 尹昱钦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1297 [国家集训队]单选错位(期望)相关的知识,希望对你有一定的参考价值。

传送门


解题思路

很妙的一道题。
首先若是选项数都相同,则同等于lc的随机写答案。
所以影响答案的就是前后的选项数。
分情况讨论:

  • \\(a[i]==a[i+1]\\),则 \\(ans+=\\frac{1}{a[i]}\\)
  • \\(a[i]> a[i+1]\\),则选择的选项在 \\(a[i+1]\\) 中的概率为 \\(\\frac{a[i+1]}{a[i]}\\),再乘上选对的概率 \\(\\frac{1}{a[i+1]}\\),得到 \\(ans+=\\frac{1}{a[i]}\\)
  • \\(a[i]< a[i+1]\\),则下一个题的答案在 \\(a[i]\\) 中的概率为 \\(\\frac{a[i]}{a[i+1]}\\),再乘上选对的概率 \\(\\frac{1}{a[i]}\\),得到 \\(ans+=\\frac{1}{a[i+1]}\\)

于是总结一下,

\\[ans=\\sum_{i=1}^{n}\\frac{1}{max(a[i],a[i+1])} \\]

AC代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=1e7+5;
int n,A,B,C,a[maxn];
double e;
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++) e+=1.0/max(a[i],a[i+1]);
	e+=1.0/max(a[n],a[1]);
	printf("%0.3lf",e);
    return 0;
}

以上是关于洛谷 P1297 [国家集训队]单选错位(期望)的主要内容,如果未能解决你的问题,请参考以下文章

luogu P1297概率与期望 [国家集训队]单选错位

luogu P1297概率与期望 [国家集训队]单选错位

Luogu P1297 [国家集训队]单选错位 | 概率与期望

[补档][国家集训队2011]单选错位

BZOJ_2134_单选错位——期望DP

BZOJ2134: 单选错位(期望乱搞)