题意:
迷宫里有n个门,每个门有值w[ i ],当值为正,意味着花费w[ i ]个时间能出迷宫,当w[ i ] 为负,意味着花费w [ i ] 个时间返回原点,并丧失记忆,问出迷宫的时间期望E,输出格式为p/q,如果无法出迷宫,则输出inf
选择出迷宫的门的时间期望为 X1*T1(X1为选择出迷宫门的概率,T1为出迷宫门的平均时间)
选择返回原点的门的时间期望为 X2*(T2+E) (X2为选择返回原地的概率,T2为返回原地的平均时间,E为出迷宫的时间期望)
E=X1*T1+X2*(T2+E);
根据题意自己化简正好得
E=sum/(n-x2) (sum为所有门绝对值时间总和,x2为返回原点门的个数)
化简用gcd
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define ll long long
using namespace std;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
};
int main()
{
int t,n,m;
scanf("%d",&t);
int op=0;
while(t--)
{
int x1=0,x2=0,t1=0,t2=0;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&m);
if(m>0)
{
x1++;
t1+=m;
}
if(m<0)
{
x2++;
t2+=-m;
}
}
int tmp=gcd(t1+t2,n-x2);
if(x2==n)
printf("Case %d: inf\n",++op);
else
printf("Case %d: %d/%d\n",++op,(t1+t2)/tmp,(n-x2)/tmp);
}
}