Cod sursa(job #1081950)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 13 ianuarie 2014 23:23:49
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
using namespace std;
ifstream fi("triang.in");
ofstream fo("triang.out");
struct pct{double x,y;};
int n,i,j,s;
double x,y;
pct a[1510],tmp;
int fc(const void *aa,const void *bb) {
    if ((*(pct*)aa).x-(*(pct*)bb).x>0.001)
        return 1;
    if ((*(pct*)bb).x-(*(pct*)aa).x>0.001)
        return -1;
    if ((*(pct*)aa).y-(*(pct*)bb).y>0.001)
        return 1;
    if ((*(pct*)bb).y-(*(pct*)aa).y>0.001)
        return -1;
    return 0;
}
int main() {
    fi>>n;
    for (i=0;i<n;i++)
        fi>>x>>y,a[i].x=x,a[i].y=y;
    qsort((void*)a,n,sizeof(a[0]),fc);
    for (i=0;i<n;i++)
        for (j=i+1;j<n;j++) {
            tmp.x=(a[j].x-a[i].x)*0.5-(a[j].y-a[i].y)*1.7320508*0.5+a[i].x;
            tmp.y=(a[j].x-a[i].x)*1.7320508*0.5+(a[j].y-a[i].y)*0.5+a[i].y;
            if (bsearch(&tmp,(void*)a,n,sizeof(a[0]),fc))
                s++;
            tmp.x=(a[j].x-a[i].x)*0.5+(a[j].y-a[i].y)*1.7320508*0.5+a[i].x;
            tmp.y=-(a[j].x-a[i].x)*1.7320508*0.5+(a[j].y-a[i].y)*0.5+a[i].y;
            if (bsearch(&tmp,(void*)a,n,sizeof(a[0]),fc))
                s++;
        }
    fo<<s/3;
    return 0;
}