Cod sursa(job #1142863)

Utilizator raddudjPogonariu Radu raddudj Data 14 martie 2014 12:30:17
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct POINT
{
    short int x,y;
};
vector <POINT> m;
POINT a[510];
inline void mijloc(POINT A,POINT B)
{
    POINT temp;
    temp.x=A.x+B.x;
    temp.y=A.y+B.y;
    m.push_back(temp);
}
inline bool cmp(POINT A,POINT B)
{
    if(A.x==B.x)
        return A.y<B.y;
    return A.x<B.x;
}
int main()
{
    int n,i,j,x,y,nr=0,sum=0;
    POINT last;
    freopen("paralel.in","r",stdin);
    freopen("paralel.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%hd%hd",&x,&y);
        a[i].x=x;
        a[i].y=y;
    }
    for(i=1; i<n; i++)
        for(j=i+1; j<=n; j++)
            mijloc(a[i],a[j]);
    sort(m.begin(),m.end(),cmp);
    last=m[0];
    nr=1;
    for(i=1; i<=m.size()-1; i++)
        if(m[i].x!=last.x||m[i].y!=last.y)
        {
            if(nr>1)
            {
                sum+=nr*(nr-1)/2;
            }
            last=m[i];
            nr=1;
        }
        else
            nr++;
    if(nr>1)
    {
        sum+=nr*(nr-1)/2;
    }
    printf("%d",sum);
    return 0;
}