题意
n个点,每个的如为 +x + x ,则可用 x x 的时间出去,如为 ,则可用 x x 的时间回到原点。每次随机选一个,问出去的期望时间
题解
分别考虑出去和回到原点的情况,设总期望为
一次出去:
P1=n正n
P
1
=
n
正
n
T1=∑x正n正
T
1
=
∑
x
正
n
正
期望为
P1∗T1
P
1
∗
T
1
回到原点:
P2=n负n
P
2
=
n
负
n
,时间就是回到原点的时间+从原点随机选出去的时间(即为
E
E
) 期望为
P2∗(T2+E)
P
2
∗
(
T
2
+
E
)
可得
E=P1∗T1+P2∗(T2+E)
E
=
P
1
∗
T
1
+
P
2
∗
(
T
2
+
E
)
因此
E=P1∗T1+P2∗T2(1−P2)=∑x正n+∑x负n(1−P2)=∑x正+∑x负n∗(1−P2)=∑x正+∑x负n∗n负
E
=
P
1
∗
T
1
+
P
2
∗
T
2
(
1
−
P
2
)
=
∑
x
正
n
+
∑
x
负
n
(
1
−
P
2
)
=
∑
x
正
+
∑
x
负
n
∗
(
1
−
P
2
)
=
∑
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;
}