解题思路
有序三元 (p,q,r) 要求 p 到 q、p 到 r 的欧氏距离相等,且三点互异。关键是固定原点 p 之后,看其余点按距离如何扎堆。
- 枚举原点 p。对每个 p,扫描其余 m−1 个点,按到 p 的距离分桶。比较平方距离 dx2+dy2,既避开开方的浮点误差,又与原距离相等性完全一致。
- 某一距离上有 c 个点时,从中挑两个做成有序对 (q,r),方案数是 P(c,2)=c⋅(c−1),不是组合数 C(c,2)。题面明确 (p,q,r) 与 (p,r,q) 各计一次。
- 把所有原点、所有桶的贡献加起来即为答案。点数互异,不会出现距离为 0 的桶。
- 坐标到 ±105,平方距离最大约 8×1010,必须用 64 位整数存 dx2+dy2;答案最大约 m(m−1)(m−2),同样要用 64 位。常见假解:用
int 乘平方溢出、用浮点比距离、只计组合不计排列、三重循环 O(m3)。