447号问题
来源:4-6 灵活选择键值 Number of Boomerangs
幕布斯1098637
2019-05-04
老师,你好。没理解“当有n个点到某点的距离相等的时候,用res += n *(n-1)",难道不是应该是res += factorial(n) 吗?
写回答
1回答
-
liuyubobobo
2019-05-04
我理解你的问题是这段话:
for(unordered_map<int, int>::iterator iter = record.begin() ; iter != record.end() ; iter ++) res += (iter->second) * (iter->second - 1);
在循环中,我们知道,距points[i]这个点的距离是iter->first的点,有iter->second这么多个。
那么,我们可以获得多少个三元组,满足题目条件呢?即i, j, k, ij的距离等于ik的距离?我们只需要取j和k就好了。(外层循环在遍历i)
j有iter->second这么多取法。取完j,k还有iter->second - 1这么多取法。
所以:res += (iter->second) * (iter->second - 1);
继续加油!:)
022019-06-05
相似问题