题目链接:
Rikka with Stone-Paper-Scissors
题意:
Rikka和Yuta一起玩剪刀石头布的游戏,很有趣对不对~
Y分别有a1,b1,c1个剪刀,石头,布,R分别有a2,b2,c2个剪刀,石头,布,R胜Y得一分,平手得零分,R输Y扣一分,求R得到最大分数的期望。
思路:
R要获得最大分数,则在Y出剪刀的时候R一定要出石头,此时R可以得到胜Y的分数但是同时会失去Y可能出布失去的分数
则A出剪刀时B得分的期望是:b2*a1/(a1+b1+c1) - b2*c1/(a1+b1+c1)
依次类推
所以B获胜的期望是:(a1*b2-b2*c1+b1*c2-a1*c2+a2*c1-a2*b)/(a1+b1+c1)
AC代码如下:
#include<stdio.h>
#include<math.h>
long long GCD(long long a,long long b)//求最大公约数
{
if(a<0)//注意可能为负的情况
{
a=-1*a;
}
if(0 == b)
return a;
else
return GCD(b, a % b);
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
long long a1,b1,c1,a2,b2,c2,sum1,sum2,ss;
scanf("%lld%lld%lld%lld%lld%lld",&a1,&b1,&c1,&a2,&b2,&c2);
sum1=-a1*c2+a1*b2-b1*a2+b1*c2-c1*b2+c1*a2;
sum2=a1+b1+c1;
if(sum1 % sum2 != 0)
{
ss=GCD(sum1,sum2);
sum1 /= ss;
sum2 /= ss;
printf("%lld/%lld\n",sum1,sum2);
}
else
printf("%lld\n", sum1/sum2);
}
return 0;
}