描述
题解
一般性博弈论都是找规律,根据样例解释,我们可以推出以下公式(结果为n/m
):
An-C(m-n) = B(m-n)-Cn
m = A+B+2C
n = B+C
这里格外需要注意的是,要防止数据溢出问题的发生,并且需要GCD一下。
代码
#include <iostream>
#include <cstdio>
using namespace std;
long long gcd(long long x, long long y)
{
if (!x || !y)
{
return x > y ? x : y;
}
for (long long t; t = x % y, t; x = y, y = t);
return y;
}
int main(int argc, const char * argv[])
{
int T;
cin >> T;
long long A, B;
while (T--)
{
cin >> A >> B;
long long C = (A + B) / 2;
// 经过样例可以推导出公式n/m
// An-C(m-n) = B(m-n)-Cn
// m = A+B+2C n = B+C
long long m = A + B + 2 * C;
long long n = B + C;
long long G = gcd(n, m); // 最大公约数
printf("%lld/%lld\n", n / G, m / G);
}
return 0;
}