Cod sursa(job #913856)

Utilizator dariusdariusMarian Darius dariusdarius Data 13 martie 2013 20:16:13
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define eps 1.e-3
using namespace std;
struct point
{
    double x,y;
};
point a[1505];
class cmp_points
{
public: inline bool operator()(const point &a,const point &b)
    {
        if(fabs(a.x-b.x)<eps)
            return a.y-b.y<=-eps;
        return a.x-b.x<=-eps;
    }
};
pair<point,point> get(point p1,point p2)
{
    /*if(fabs(p1.x-p2.x)<eps)
     {
     ///verticala:
     point P1,P2;
     P1.y=P2.y=(p1.y+p2.y)*0.5;
     double dist=fabs(p1.y-p2.y)*sqrt(3.0)*0.5;
     P1.x=p1.x+dist;
     P2.x=p2.x-dist;
     return make_pair(P1,P2);
     }
     if(fabs(p1.y-p2.y)<eps)
     {
     ///orizontala:
     point P1,P2;
     P1.x=P2.x=(p1.x+p2.x)*0.5;
     double dist=fabs(p1.x-p2.x)*sqrt(3.0)*0.5;
     P1.y=p1.y+dist;
     P2.y=p2.y-dist;
     return make_pair(P1,P2);
     }*/
    double A,B,C,D,E,P,xm,ym;
    xm=(p1.x+p2.x)*0.5;
    ym=(p1.y+p2.y)*0.5;
    D=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    E=0.75*D*D-xm*xm-ym*ym;
    P=(p1.y-p2.y)/(p1.x-p2.x);
    
    A=1.0/(P*P)+1.0;
    B=-2.0*xm/P-2.0*xm;
    C=-ym*ym+xm*xm/(P*P)-E;
    
    point P1,P2;
    P1.x=(-B+sqrt(B*B-4.0*A*C))/(2.0*A);
    P2.x=(-B-sqrt(B*B-4.0*A*C))/(2.0*A);
    P1.y=ym+(xm-P1.x)/P;
    P2.y=ym+(xm-P2.x)/P;
    return make_pair(P1,P2);
}
int main()
{
    freopen("triang.in","r",stdin);
    freopen("triang.out","w",stdout);
    int n,i,j,nr=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%lf%lf",&a[i].x,&a[i].y);
    sort(a+1,a+n+1,cmp_points());
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
        {
            pair<point,point> p(get(a[i],a[j]));
            if(binary_search(a+1,a+n+1,p.first,cmp_points()))
                nr++;
            if(binary_search(a+1,a+n+1,p.second,cmp_points()))
                nr++;
        }
    printf("%d\n",nr/3);
    return 0;
}