思路:
计算面积,且限制了x,y的最大值,因此首先固定三角形的一个点在原点(0,0)。由于任何一个三角形都存在与之面积相同的直角三角形,因此我们将另两个点选在坐标轴上,设为 (x,0) 与 (0,y)
因此我们可以得到等式xy=2mnkxy = \frac{2mn}{k}xy=k2mn。
题目中要求x<n,y<m,由于k>=2,因此只要等式右侧的计算结果为整数,那么一定存在符合条件的x和y。
首先判断k是否为偶数:
若为偶数,可以将分子的2消去,再计算n和k的最大公约数,令x为n消去最大公约数后的值,y为m/k消去最大公约数后的值。
(因为等式右边最后是一个整数,说明k可以和mn除开,k和n的最大公约数,就是k可以和n除开的部分,剩下的部分自然就是可以和m除开的部分。)
若为奇数,则x或y中有一个数需要再乘2。为了使x和y不超过界限,需要判断n和k的最大公约数是否大于等于2,若是的话,则可以在x上乘2;若不是,说明k和n互质,那么k全部和m除,在y上乘2即可。
代码:
# D. Vasya and Triangle
# a * b = 2 * m * n / k
def gcd(x, y):
return x if y == 0 else gcd(y, x%y)
n, m, k = map(int, input().split())
if (2 * n * m) % k != 0:
print("NO")
exit()
print("YES")
flag = True
if k % 2 == 0:
k /= 2
else:
flag = False
gcd_ans = gcd(n, k)
x = n / gcd_ans
y = m / (k / gcd_ans)
if flag == False:
if gcd_ans >= 2:
x *= 2
else:
y *= 2
print(str(int(x)) + " 0")
print("0 " + str(int(y)))
print("0 0")