Light OJ 1027 - A Dangerous Maze(概率)

时间:2022-06-08 12:32:27

题目大意:

你在一个迷宫里,你面前有n个门,你选择门的概率是一样的,每扇门有一个数字k, 加入这个数字是负数,那么这个门会花费你abs(k)分钟后把你带回原点, 假如这个数字是正数,他可以把你带出迷宫,并且花费时间是k.
问把你带出迷宫的预计期望时间是多少?如果无解输出 “inf”,输出结果要求是最简分数的形式。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;
const int INF = 1e9+;
const int MAXN = ;
/**
走出来的期望时间 = 需要走次数的期望*平均走一次花费的时间
需要走次数的期望:假设门的总个数是n,可以走出来的门总个数是k,那么我们走出来期望的次数是 n/k.
平均走一次花费的时间: 总时间/n
*/
int gcd(int a,int b)
{
return b == ?a:gcd(b,a%b);
}
int main()
{
int cas = , T, n, a[];
scanf("%d", &T); while(T --)
{
scanf("%d", &n);
int k = , sumTime = ;
for(int i=; i<n; i++)
{
scanf("%d", &a[i]);
sumTime += abs(a[i]);
if(a[i] >= )
k ++;
} printf("Case %d: ", cas ++);
if(k == )
puts("inf");
else
{
int a = gcd(sumTime, k);
printf("%d/%d\n", sumTime/a, k/a);
} } return ;
}