【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;
    for(int i=1;i<=n;i++)a[i]=a[i]%C+1;
    if(!(a[1]==0||a[n]==0))
    {
      if(a[1]>=a[n])ans+=1.0/a[1];
      else ans+=1.0/a[n];
    }
    for(int i=2;i<=n;i++)
    {
        if(a[i]==0||a[i-1]==0)continue;
        if(a[i]>=a[i-1])ans+=1.0/a[i];
        else ans+=1.0/a[i-1];
    }
    printf("%.3lf",ans);
    return 0;
}
时间: 2024-10-18 05:40:10

【BZOJ2134】单选错位 概率DP的相关文章

【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

bzoj2134单选错位

bzoj2134单选错位 题意: 试卷上n道选择题,每道分别有ai个选项.某人全做对了,但第i道题的答案写在了第i+1道题的位置,第n道题答案写在第1题的位置.求期望能对几道.n≤10000000 题解: 水题,然而我不会.第i题与第i+1题答案一样的概率是1/max(aiai+1) 代码: 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 int a[10000010],n,A,B,C; 6

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 单选错位 ——期望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)

cogs1882 单选错位 概率与期望

链接:http://cogs.pro/cogs/problem/problem.php?pid=1882 题意:你涂串卡了,求你期望对了几个. 妈的水题两分钟-- 首先,假rand()出来的数组,a[i]<=a[i+1]的话,a[i]答案一定在a[i+1]中,那么第i+1个对的概率就为1/a[i+1]: 反之,a[i]不一定在a[i+1]中,在的概率为a[i+1]/a[i],对的概率为1/a[i]. 闹了半天就是取较大的那个的倒数(╯‵□′)╯︵┻━┻吔屎啦(╯‵□′)╯︵┻━┻ 1 #incl

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

BZOJ2134 单选错位

= =是道沙茶题,直接模拟即可... 1 /************************************************************** 2 Problem: 2134 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:1292 ms 7 Memory:78932 kb 8 ****************************************************************

bzoj2134: 单选错位(trie)

预处理前后缀异或和,用trie得到前后缀最大答案,枚举中间点把左右两边加起来就是当前中间点的最大答案了...这个操作没见过,比较有意思,记录一下 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> #define ll long long using namespace std; const int maxn=500

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];