在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形。
Input
多组数据(<=10),处理到EOF。
每组数据第一行一个整数n(4<=n<=500)。接下来n行每行两个整数xi,yi(0<=xi,yi<=1e9),表示每个点的坐标。
Output
每组数据输出一个整数,表示用这些点能构成多少个平行四边形。
Sample Input
4
0 1
1 0
1 1
2 0
Sample Output
1
[分析]
大家可能一开始的思路是算斜率,但是应该算中点。
如果两条对角线的中点是重合的,那么就能构成一个平行四边形!!!
这里分享一个究极大佬的代码。
代码风格十分飘逸简短。我看了好久才看懂
大意:输入一个点,对其之前输入的点凑对,构成一个中点(虽然他没除二,但中点*2也是唯一的,所以不影响),查询这个中点map的值然后将值加入ans,然后map值自加。
[代码]
#include<cstdio>
#include<map>
#include<cstring>