https://codeforces.com/gym/103104/problem/J
大意
输入三个点表示一个三角形,输出最小的与这个三角形的相似的三角形。
共 T≤104 组数据, ∣x∣,∣y∣≤109 .
方法
原三角形的点记为 (xi′,yi′) 将一个点平移至 (0,0) ,与之相似的三角形的两点 (xi,yi) 可以用一个线性变换表示:
M=(ab−ba)a,b∈Z
M(xiyi)=(xi′yi′)
表示把原有的基底 (1,0) , (0,1) 映射成 (a,b) , (−b,a) 。
并且
(xi′yi′)2=(a2+b2)(xiyi)2
因此计算三边长平方的gcd,记为 g ,如果存在 a2+b2=g ,
相应的有
M−1=(a−bba)a2+b21
(xiyi)=M−1(xi′yi′)
以此得到相似三角形的点 (xi,yi) ,否则无解。
这里忽略了 a2+b2=g 无解的情况,事实证明不影响答案正确性。
代码