Cod sursa(job #1777365)

Utilizator danstefanDamian Dan Stefan danstefan Data 12 octombrie 2016 12:20:50
Problema Patrate 3 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>
#define eps 1e-5
using namespace std;
int p1,p2,i,n,j,sol;
double x0,y00,x1,y11,x2,y2,x3,y3,mx,my,dx,dy;
pair<double,double>v[1010];
int cautbin(double val)
{
    int in=1,sf=n;
    while(in<=sf)
    {
        int mid=(in+sf)/2;
        if(abs(v[mid].first-val)<=eps)return mid;
        else if(v[mid].first>val)sf=mid-1;
        else in=mid+1;
    }
    return 0;
}
int main()
{
    freopen("patrate3.in","r",stdin);
    freopen("patrate3.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; ++i)
        scanf("%lf%lf",&v[i].first,&v[i].second);
    sort(v+1,v+n+1);
    for(i=1; i<=n; ++i)
    {
        x0=v[i].first;
        y00=v[i].second;
        for(j=i+1; j<=n; ++j)
        {
            x1=v[j].first;
            y11=v[j].second;
            mx=1.0*(x0+x1)/2;
            my=1.0*(y00+y11)/2;
            dx=abs(mx-x0);
            dy=abs(my-y00);
            x2=mx+dy;
            x3=mx-dy;
            y2=my-dx;
            y3=my+dx;
            p1=cautbin(x2);
            p2=cautbin(x3);
            if(p1!=0&&p2!=0)
                if(abs(y2-v[p1].second)<=eps&&abs(y3-v[p2].second)<=eps)++sol;
        }
    }
    printf("%d\n",sol);
    return 0;
}