您的位置:首页 > 其它

7_4_A题 A Dangerous Maze题解 [Light oj 1027](求期望)

2016-07-05 00:57 453 查看
题目链接

简单题意

有n扇门,门有两种功能:

1. 在x分钟后使人逃出迷宫

2. 让人浪费x分钟

每次浪费时间以后人会‘失忆’,即每次做选择时对门的选择是完全随机的.

求走出迷宫所需时间的期望

思路

不妨假设有m扇可以出去的门,正确的门使用的时间总和为sumt1,不正确的门使用的时间总和为sumt2,则对于每次选择来说,有两种结果:选中正确的门/没选中正确的门。

设选中能出去的门的概率为 p=mn,则没选中的概率为 q=n−mn;

选中正确的门后花费时间的期望 E1=sumt1m,之后就直接离开迷宫;

选中不正确的门后花费时间的期望 E2=sumt2n−m,然后重新开始新的选择,直至离开迷宫。

所以最终的期望是E=p∗(E1)+q∗(E2+E)

展开得E=mn∗sumt1m+n−mn∗(sumt2n−m+E)

= mn∗E=sumt1+sumt2n

= E=sumt1+sumt2m

当没有正确的门即 m=0 时,不能走出迷宫,输出‘inf’。

代码

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

using namespace std ;

int gcd (int a,int b){
return b == 0 ? a:gcd(b,a%b);
}

int main(){
int T;
scanf("%d" ,&T);
int kase = 1;
while(T--){
int n;
scanf("%d", &n);
int sum = 0;
int posnum = 0;
for(int i = 0; i < n ; i ++){
int temp;
scanf("%d", &temp);
sum += abs(temp);
if(temp > 0)
posnum ++;
}
if(posnum == 0)
printf("Case %d: inf\n",kase++);
else{
int gc = gcd(sum , posnum);
printf("Case %d: %d/%d\n",kase++,sum/gc,posnum/gc);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: