BZOJ 2134 单选错位 ——期望DP

发现概率是∑1/两道题答案相同的概率,

稍加化简

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)

int a[10000005],n,A,B,C;
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;
    F(i,1,n-1) ans+=1.0/max(a[i],a[i+1]);
    ans+=1.0/max(a[n],a[1]);
    printf("%.3f\n",ans);
}

  

时间: 2024-11-05 14:55:45

BZOJ 2134 单选错位 ——期望DP的相关文章

BZOJ 2134 单选错位 期望DP

题目大意:给定一张n道选择题的试卷,所有答案都是正确的,但是第i个题的答案被答到了第i%n+1个位置上,求期望得分 第i道题的答案被填到了第i%n+1个位置上 期望得分是1/max(a[x],a[i%n+1]) 然后就水了233 #include <cstdio> #include <cstring> #include <iostream> #define M 10001000 #include <algorithm> using namespace std

BZOJ 2134: 单选错位( 期望 )

第i个填到第i+1个的期望得分显然是1/max(a[i],a[i+1]).根据期望的线性性, 我们只需将每个选项的期望值累加即可. --------------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10000009; int a[maxn];

BZOJ_2134_单选错位——期望DP

BZOJ_2134_单选错位——期望DP 题意: 分析:设A为Ai ∈ [1,ai+1] 的概率,B为Ai = A(imodn+1)的概率显然P(A|B) = 1,那么根据贝叶斯定理P(B) = P(B|A)*P(A)P(A) = min(ai,ai+1)/aiP(B|A) = 1/a(i+1)P(B) = min(ai,ai+1)/(ai*a(i+1))又因为期望的可加性,直接加起来统计答案 代码: #include <stdio.h> #include <string.h> #

BZOJ 2134 单选错位

ANS=Σ1/max(a[i],a[i%n+1]). #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 10000050 using namespace std; int n,A,B,C,a[maxn]; double ans=0; int main() { scanf("%d%d%d%d%d",&n,&am

【BZOJ】2134: 单选错位

[算法]期望DP [题意]有n道题,第i道题有ai个选项.一个人把所有的正确答案填到了后面一题上(特殊的,当i=n的时候填到1上),问他期望做对几道题? [题解]每道题的期望与其他题目的期望无关. 对于每道题,有ai-1个可能的选项,ai个可能正确选项,共有ai-1ai种组合,其中只有Min(ai-1,ai)种组合是正确的,则期望是E[i]=Min(ai-1,ai)/ai-1ai=1/Max(ai-1,ai). E(x)=ΣE[i](线性) #include<cstdio> #include&

BZOJ 3450 Tyvj1952 Easy 期望DP

题目大意:给定一个OX序列,一些点未确定,连续len长度的O会得到len^2的收益,求期望收益值 令f[i]为第i个点的期望收益值,l[i]为第i个点的期望长度 如果一个点是'O' 那么l[i]=l[i-1]+1 f[i]=f[i-1]+(l[i]*2-1) 如果一个点是'X' 那么l[i]=0 f[i]=f[i-1] 如果一个点是'?' 那么l[i]=(l[i-1]+1)/2 f[i]=f[i-1]+(l[i]*2-1) 等等 好像有些问题- - 如果一个点长度为1那么增加的收益显然是(1*2

【BZOJ2134】单选错位 概率DP? 貌似不算DP

转载请注明出处:http://blog.csdn.net/vmurder/article/details/42879121 题意:输入完了后,第i道题有ai种可能的正确选项,有ai-1种某人可能选的选项,问期望对多少题. 这道题的期望对于两道题之间是无关的. 只需要对每道题单独讨论 a种正确选项,b种可能选项 对于某种正确选项,某人有1/b的概率做对 总几率:1/b/a. 而这样的正确选项有min(a,b)种. 恩,就是这样. 代码: #include <cstdio> #include &l

[BZOJ 4318]OSU!(期望dp)

Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数. Solution 和上一题差不多…双倍经验~ 平方的期望并不等于期望的平方,所以还

【BZOJ2134】单选错位 概率DP

一句话:有一些看似有关系的期望在把事件全面发生之后就变得相互独立了 #include<cstdio> using namespace std; int n,A,B,C,a[10000001]; 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;