【概率&数学期望】A Dangerous Maze LightOJ - 1027

Think:
1知识点:概率&数学期望
2题意:
(1):T组测试数据
(2):每组测试数据,n扇门,每扇门对应一个xi,等概率进入任意一扇门,若进入门的xi为正,则xi秒之后离开迷宫,若进入们的xi为负,则xi秒之后返回初始点
(3):询问离开迷宫的数学期望
(4):输出格式:测试数据 期望值最简分子/期望值最简分母
3解题思路:
(1)xi > 0: d1 = (1/n) * (x1+x2+…+xu)
(2)xi < 0: d2 = (1/n) * (abs(y1)+abs(y2)+…+abs(yv) + v*d)
即d = d1 + d2 = (1/n) * (x1+x2+…+xu) +(abs(y1)+abs(y2)+…+abs(yv) + v*d)
即(n-v) * d = x1 + x2 + … + xu + abs(y1) + abs(y2) + … + abs(yv)
即:
若v == n 则 d = inf
除此之外:
sum = x1 + x2 + … + xu + abs(y1) + abs(y2) + … + abs(yv)
t = gcd(sum, n-v)
d = p/q
p = sum/gcd(sum, n-v)
q = (n-v)/gcd(sum, n-v)

vjudge题目链接
建议参考博客——题意分析

以下为Accepted代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

int gcd(int x, int y);

int main(){
    int cas = 1, T, n, m, sum, i, x;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        m = 0, sum = 0;
        for(i = 0; i < n; i++){
            scanf("%d", &x);
            if(x > 0) sum += x;
            else {
                sum += -x;
                m++;
            }
        }
        if(m == n){
            printf("Case %d: inf\n", cas++);
        }
        else {
            int t = gcd(sum, n-m);
            printf("Case %d: %d/%d\n", cas++, sum/t, (n-m)/t);
        }
    }
    return 0;
}
int gcd(int x, int y){
    if(!y) return x;
    else return gcd(y, x%y);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值