单选错位[bzoj2134]

 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2134

 题解:

  每一步正确的概率的倒数之和就是期望。

  第i道题正确的概率为1/max(a[i],a[i-1])。因为假设第i题的选项比第i-1题多,那么正确概率为1/a[i-1] * a[i-1]/a[i] ,即第i题的正解在第i-1题的选项中且选对;若第i题选项比第i-1题少,那么概率为1/a[i-1],因为正解一定在a[i-1]中,显然随机选时选到正解的概率为1/a[i-1]。(因为题目之间无关,所以可以看做随机的)。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define LL long long
 5 #define RI register int
 6 using namespace std;
 7 const int INF = 0x7ffffff ;
 8 const int N = 1e7 + 10 ;
 9 
10 inline int read() {
11     int k = 0 , f = 1 ; char c = getchar() ;
12     for( ; !isdigit(c) ; c = getchar())
13       if(c == '-') f = -1 ;
14     for( ; isdigit(c) ; c = getchar())
15       k = k*10 + c-'0' ;
16     return k*f ;
17 }
18 int a[N] ;
19 
20 int main() {
21     int n, A, B, C ; 
22     scanf("%d%d%d%d%d",&n,&A,&B,&C,a+1); 
23     for (int i=2;i<=n;i++) a[i] = ((long long)a[i-1] * A + B) % 100000001; 
24     for (int i=1;i<=n;i++) a[i] = a[i] % C + 1 ;
25     double ans = 0 ;
26     a[0] = a[n] ;
27     for(int i=0;i<n;i++) ans += 1.0/(double)max(a[i],a[i+1]) ;
28     printf("%.3lf",ans) ;
29     return 0 ;
30 }

 

posted @ 2018-03-22 11:24  zubizakeli  阅读(188)  评论(0编辑  收藏  举报