LightOJ 1027 A Dangerous Maze(数学期望)

题意:

有n个门,每个门有数值x,现在可以选择一个门,如果选择的门的x大于0,则x分钟之后就可以离开,
如果选择的门的x小于0,则-x分钟之后回到原地重新选择且忘记之前选择的是哪扇门,求离开的期望时间

Sample Input

3

1
1

2
-10 -3

3
3 -6 -9

Sample Output

Case 1: 1/1
Case 2: inf
Case 3: 18/1

思路:

设期望为E
每次选择门只有两种情况:
1.出去,则期望是1/n*(t)
2.回来,那么又要重新选择一次,则期望为1/n(t+E)

设:
大于0的门的数量为door1,时间总和为sum1
小于0的门的数量为door2,时间总和为sum2(x为负数取绝对值)
E= 1/n ( sum1 ) + 1/n ( sum2 + door2*E )
整理一下就是E=(sum1+sum2)/(n-door2)

又因为n-door2=door1
所以E=(sum1+sum2)/door1

code:

#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
signed main(){
    int T;
    cin>>T;
    int cas=1;
    while(T--){
        int n;
        cin>>n;
        int up=0,down=0;
        for(int i=1;i<=n;i++){
            int x;
            cin>>x;
            if(x>0)down++;
            up+=abs(x);
        }
        printf("Case %d: ",cas++);
        if(down==0){
            cout<<"inf"<<endl;
        }else{
            int g=gcd(up,down);
            cout<<up/g<<'/'<<down/g<<endl;
        }
    }
    return 0;
}
发布了364 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/103392651