LightOJ 1058

题意:http://www.lightoj.com/volume_usersubmissions.php

思路:只要两条线的中点交于一点  就能够构成平行四边形   即只需要遍历任意两个点的中点   然后统计

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<math.h>
#include<string>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define N 1009
#define Lson rood<<1
#define Rson rood<<1|1
#define PI acos(-1)
struct point
{
    int x,y;
}a[N],q[N*N];
int cmp(point e,point f)
{
    if(e.x!=f.x) return e.x<f.x;
    return e.y<f.y;
}
int main()
{
    int T,t=1;
    scanf("%d",&T);
    while(T--)
    {
        int n,ans=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d%d",&a[i].x,&a[i].y);
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                q[ans].x=a[i].x+a[j].x;
                q[ans++].y=a[i].y+a[j].y;
            }
        }
        sort(q,q+ans,cmp);
        int s=1,sum=0;
        for(int i=1;i<ans;i++)
        {
            if(q[i].x==q[i-1].x&&q[i].y==q[i-1].y)
                s++;
            else
            {
                sum+=s*(s-1)/2;
                s=1;
            }
        }
        sum+=s*(s-1)/2;
        printf("Case %d: %d
",t++,sum);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/a719525932/p/7809808.html