题意:你在一个迷宫里,面前有n扇们,每个门有一个数字k;如果k为正数,则通过这扇门,走k分钟就能出去,如果为负数,则通过这扇门走-k的分钟回到迷宫;走每扇门概率一样.问走出迷宫所需时间的期望值;
思路:首先如果全是负数肯定是inf;然后我们假设我们走出去的期望时间是d;那么拿第三个样例举例子; d = 1/3 * 3 + 1/3( 6 + d) + 1/3 (9 + d);
意思就是每扇门被选择的概率是1/3;选选第一扇门要花3分钟出去,选第二扇门要6 + d(花6分钟返回原地,在花期望d出去);
然后根据这个式子求出d;并用分数表示。
经过推导:d=正数个数的倒数 * ∑abs(Xi)
参考博客:http://blog.csdn.net/danceonly/article/details/16824745#
http://blog.csdn.net/yeyeyeguoguo/article/details/46417489
#include <cstdio>
#include <cstring>
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}
int main()
{
int T, n;
scanf("%d", &T);
for (int cas = 1; cas <= T; cas++)
{
scanf("%d", &n);
int pos = 0, posv = 0, neg = 0, negv = 0;
for (int i = 1; i <= n; i++)
{
int a;
scanf("%d", &a);
if (a > 0)
{
pos++;
posv += a;
}
else
{
neg++;
negv += -a;
}
}
printf("Case %d: ", cas);
if (pos == 0)
{
printf("inf\n");
continue;
}
int up = posv + negv;
int down = n - neg;
int t = gcd(up, down);
printf("%d/%d\n", up/t, down/t);
}
return 0;
}