题意:有n扇门,每扇门有一个值x,大于0代表x分钟后出去,小于0代表x分钟后回到原地,求出去的时间的期望
题解:假设出去的总时间为sum1,回来的总时间为sum2,出去的门个数为out,进来的门的个数为in,出去的期望为E
一次直接传送出去的时间期望为sum1/n,第一次不能直接传送出去但是后来传送出去的时间期望为(sum2+in*E)/n
则E=sum1/n+(sum2+in*E)/n,化简得E=(sum1+sum2)/out,特判inf,化成最简分式
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define C 0.5772156649 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define pii pair<int,int> using namespace std; const double g=10.0,eps=1e-12; const int N=200000+10,maxn=200000+10,inf=0x3f3f3f3f; int main() { int t,res=0; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int sum=0,out=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); if(x>0)out++; sum+=abs(x); } if(out==0) { printf("Case %d: inf ",++res); continue; } int x=__gcd(sum,out); sum/=x,out/=x; printf("Case %d: %d/%d ",++res,sum,out); } return 0; } /******************** ********************/