首页 > 代码库 > 【BZOJ】2134: 单选错位
【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<cstring> #include<algorithm> 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; }
【BZOJ】2134: 单选错位
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。