题意
n个点,每个的如为 +x+x,则可用 xx 的时间出去,如为 ,则可用 xx 的时间回到原点。每次随机选一个,问出去的期望时间
题解
分别考虑出去和回到原点的情况,设总期望为
一次出去:P1=n正nP1=n正n T1=∑x正n正T1=∑x正n正 期望为 P1∗T1P1∗T1
回到原点:P2=n负nP2=n负n ,时间就是回到原点的时间+从原点随机选出去的时间(即为EE) 期望为 P2∗(T2+E)P2∗(T2+E)
可得 E=P1∗T1+P2∗(T2+E)E=P1∗T1+P2∗(T2+E)
因此 E=P1∗T1+P2∗T2(1−P2)=∑x正n+∑x负n(1−P2)=∑x正+∑x负n∗(1−P2)=∑x正+∑x负n∗n负E=P1∗T1+P2∗T2(1−P2)=∑x正n+∑x负n(1−P2)=∑x正+∑x负n∗(1−P2)=∑x正+∑x负n∗n负
代码
#include <cstdio>
int T,n,ans1,num;
int gcd(int x,int y){
if(!y) return x;
return gcd(y,x%y);
}
int main(){
scanf("%d",&T);
for(int tt=1;tt<=T;tt++){
scanf("%d",&n);num=0,ans1=0;
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
if(x>0) ans1+=x;
else ans1-=x,num++;
}
if(num==n) printf("Case %d: inf\n",tt);
else{
num=n-num;
int d=gcd(ans1,num);
printf("Case %d: %d/%d\n",tt,ans1/d,num/d);
}
}
return 0;
}