题意:
有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;
}