【BZOJ】2134: 单选错位 期望DP
发布日期:2021-08-31 13:57:52 浏览次数:28 分类:技术文章

本文共 862 字,大约阅读时间需要 2 分钟。

【题意】有n道题,第i道题有ai个选项。把第i道题的正确答案填到第i+1道题上(n填到1),问期望做对几道题。n<=10^7。

【算法】期望DP

【题解】正确答案的随机分布不受某道题填到后面是否正确影响,因此每道题对的期望都是独立的。

从排列的角度分析,对每道题有a[i-1]个选择和a[i]个选项,共a[i-1]*a[i]种排列,其中只有min(a[i-1],ai)种排列使这道题正确,所以

$$E(i)=\frac{Min(a[i-1],a[i])}{a[i-1]*a[i]}=\frac{1}{Max(a[i-1],a[i])}$$

然后根据期望的线性相加。

复杂度O(n)。

#include
#include
#include
using namespace std;const int maxn=10000000;int n,a[maxn];int main(){ int A,B,C; 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; a[0]=a[n]; double ans=0; for(int i=1;i<=n;i++)ans+=1.0/max(a[i],a[i-1]); printf("%.3lf",ans); return 0;}
View Code

 

如果实在纠结前面题对和后面题对有一题重合,考虑期望可以线性相加,所以实际上是可以拆出来计算的。

转载于:https://www.cnblogs.com/onioncyc/p/7221612.html

转载地址:https://blog.csdn.net/weixin_34077371/article/details/93170551 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python学习之路39-特性property
下一篇:iOS 证书申请新步骤

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月19日 04时35分03秒