题目意思
T组案例,每组案例两行,第一行三个数字表示第一个人的剪刀牌,石头牌,布牌的数量,第二行表示第二个人的牌的数量,求第一个人赢过第二个人的期望。
Sample Input
4
2 0 0
0 2 0
1 1 1
1 1 1
1 0 0
0 0 1
123 456 789
100 200 1068
Sample Output
2
0
-1
3552/19
解题思路
枚举九种可能情况就过了?赛后吉老师说还要证明公式啥的,好复杂,算了,还是枚举吧。
听说还要特判是个负数?提交还WA了一发,赛后发现负数好像可以取模啊,佛系WA一发。
AC代码
#include <iostream>
#define ll long long
using namespace std;
ll gcd(ll a, ll b)
{
return a % b == 0 ? b : gcd(b, a%b);
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int flag = 0;
ll a, b, c;
ll q, w, e;
scanf("%lld%lld%lld%lld%lld%lld", &a, &b, &c, &q, &w, &e);
ll qq = (a*(w - e) + b * (e - q) + c * (q - w));
ll ww = a + b + c;
if (qq < 0)
{
qq = -qq;
flag = 1;
}
if (qq%ww == 0)
{
ll ans = qq / ww;
if (flag == 1)
printf("-");
printf("%lld\n", ans);
}
else
{
ll ac = gcd(qq, ww);
if (flag == 1)
printf("-");
printf("%lld/%lld\n", qq / ac, ww / ac);
}
}
}