fzu2231平行四边形数

来源:互联网 发布:易语言电视直播源码 编辑:程序博客网 时间:2024/05/21 17:30

在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形。

Input

多组数据(<=10),处理到EOF。

每组数据第一行一个整数n(4<=n<=500)。接下来n行每行两个整数xi,yi(0<=xi,yi<=1e9),表示每个点的坐标。

Output

每组数据输出一个整数,表示用这些点能构成多少个平行四边形。

Sample Input
40 11 01 12 0
Sample Output
1
代码
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;struct midxy{    int a,b;}mid[250000];bool cmp(midxy A,midxy B){    if(A.a!=B.a)        return A.a<B.a;    else        return A.b<=B.b;}int main(){    int n;    while(~scanf("%d",&n))    {        int x[505],y[505],k=0,i,j;        for(i=0;i<n;i++)            scanf("%d %d",&x[i],&y[i]);        for(i=0;i<n;i++)        {            for(j=i+1;j<n;j++)            {                mid[k].a=x[i]+x[j];                mid[k].b=y[i]+y[j];                k++;            }        }        sort(mid,mid+k,cmp);        int sum=1,cc=0;        for(i=0;i<k-1;i++)        {            if(mid[i].a==mid[i+1].a&&mid[i].b==mid[i+1].b)            {                sum++;            }else            {                cc+=sum*(sum-1)/2;                sum=1;            }        }        printf("%d\n",cc);    }    return 0;}

原创粉丝点击