LightOJ1027 A Dangerous Maze(期望)

题目大概说你正在起点,面前有$n$个门,每个门有一个数字$x$,正数表示开这个门$x$分钟后会出去,负数表示开这个门$-x$分钟后会回到起点。选择门的概率是一样的且每次选择互不影响。问出去的时间期望是多少。

$d[0]$表示从起点出发出去的期望,$d[i](1\leqslant i\leqslant n)$表示选择第i个门出去的期望;

不妨设$1\dots j$的门是正数,$j+1\dots n$的门是负数,那么:

$$d[i]=x[i](1\leqslant i\leqslant j)$$

$$d[i]=x[i]+d[0](j+1\leqslant i\leqslant n)$$

由于每个门被选择的概率均等,那么:

$$d[0]=\frac{\sum_{i=1}^{j}x[i]+\sum_{i=j+1}^{n}(x[i]+d[0])}{n}$$

$$d[0]=\frac{\sum_{i=1}^{n}x[i]}{n-j}$$

这样计算出$d[0]$就是要的结果了。队友教的。

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int gcd(int a,int b){
 5     if(b==0) return a;
 6     return gcd(b,a%b);
 7 }
 8 int main(){
 9     int t,n,a;
10     scanf("%d",&t);
11     for(int cse=1; cse<=t; ++cse){
12         scanf("%d",&n);
13         int tot=0,cnt=0;
14         for(int i=1; i<=n; ++i){
15             scanf("%d",&a);
16             if(a<0) tot-=a,++cnt;
17             else tot+=a;
18         }
19         int x=tot,y=n-cnt;
20         if(y==0) printf("Case %d: inf\n",cse);
21         else printf("Case %d: %d/%d\n",cse,x/gcd(x,y),y/gcd(x,y));
22     }
23     return 0;
24 }

 

posted @ 2016-03-19 22:17  WABoss  阅读(222)  评论(0编辑  收藏  举报