Cod sursa(job #1558023)

Utilizator misinoonisim necula misino Data 28 decembrie 2015 16:48:50
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.11 kb
#include<fstream>
#include<algorithm>
#define eps 0.000001

using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int i,j,n,nr;
struct pc{double x,y;};
pc p1,p2,p3,p4,v[10009];
double abs(double x)
{
    if(x<0)
    return -x;
    return x;
}
bool cmp(pc a,pc b)
{
    if(abs(a.x-b.x)<eps)
    {
        return a.y<b.y;
    }
    return a.x<b.x;
}
int cb(pc a)
{
    int li=1,ls=n,mij;
    while(li<=ls)
    {
        mij=(li+ls)/2;
        if(abs(a.x-v[mij].x)<=eps&&abs(a.y-v[mij].y)<=eps&&mij!=i&&mij!=j)
        return 1;
        else
        if(cmp(a,v[mij]))
        ls=mij-1;
        else
        li=mij+1;
    }
    return 0;
}
int main()
{
    f>>n;
    for(i=1;i<=n;++i)
    f>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,cmp);
    for(i=1;i<n;++i)
    for(j=i+1;j<=n;++j)
    {
        p1=v[i];
        p2=v[j];
        p3.x=p1.x+p1.y-p2.y;
        p3.y=p1.y+p2.x-p1.x;
        p4.x=p2.x+p1.y-p2.y;
        p4.y=p2.y+p2.x-p1.x;
        if(cb(p3))
        {
            if(cb(p4))
            ++nr;
        }
    }
    g<<nr/2<<'\n';
    return 0;
}