Cod sursa(job #1035808)

Utilizator george_stelianChichirim George george_stelian Data 18 noiembrie 2013 20:16:13
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <algorithm>
#define fmic 0.00001

using namespace std;

struct punct
{
    float x,y;
};

punct v[1010],a,b;
int n,i,j,nr;

inline float modul(float a)
{
    return a<0?-a:a;
}

inline bool comp(punct a,punct b)
{
    if(modul(a.x-b.x)<fmic) return a.y<b.y;
    else return a.x<b.x;
}

inline bool exista(punct a)
{
    int mij,st=1,dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(modul(v[mij].x-a.x)<fmic && modul(v[mij].y-a.y)<fmic) return true;
        if(comp(a,v[mij])) dr=mij-1;
        else st=mij+1;
    }
    return false;
}

int main()
{
    freopen("patrate3.in", "r", stdin);
    freopen("patrate3.out", "w", stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%f%f",&v[i].x,&v[i].y);
    sort(v+1,v+n+1,comp);
    for(i=1;i<n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            a.x=v[i].x+v[i].y-v[j].y;
            a.y=v[i].y+v[j].x-v[i].x;
            b.x=v[j].x+v[i].y-v[j].y;
            b.y=v[j].y+v[j].x-v[i].x;
            if(exista(a) && exista(b)) nr++;
        }
    }
    printf("%d",nr/2);
    fclose(stdin);fclose(stdout);
    return 0;
}