Cod sursa(job #922516)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 22 martie 2013 11:51:13
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

struct punct {
    long long x,y;
};
punct p[1510];
int n,i,j,k;
long long nr;

bool cmp(punct a,punct b) {
    if (a.x != b.x) return (a.x < b.x);
    else return (a.y < b.y);
}

long long modul(long long a) {
    if (a>0) return a;
    else return -a;
}

int main() {
    freopen("triang.in","r",stdin);
    freopen("triang.out","w",stdout);
    scanf("%d",&n);
    const double rad = sqrt(3);
    for (int i=1;i<=n;i++) {
        double crtx,crty;
        scanf("%lf %lf",&crtx,&crty);
        p[i].x = 1000*crtx;
        p[i].y = 1000*crty;
    }
    sort(p+1,p+n+1,cmp);
    for (int i=1;i<n;i++) {
        for (int j=i+1;j<=n;j++) {
            long long x1 = p[i].x;
            long long y1 = p[i].y;
            long long x2 = p[j].x;
            long long y2 = p[j].y;
            long long xa = (x1+x2)/2;
            long long xb = (y2-y1)*rad/2;
            long long ya = (y1+y2)/2;
            long long yb = (x2-x1)*rad/2;
            punct pcrt;
            pcrt.x = xa+xb;
            pcrt.y = ya-yb;
            if (binary_search(p+1,p+n+1,pcrt,cmp)) nr++;
            pcrt.x = xa-xb;
            pcrt.y = ya+yb;
            if (binary_search(p+1,p+n+1,pcrt,cmp)) nr++;
        }
    }
    printf("%lld",nr);
    return 0;
}