Cod sursa(job #2314858)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 9 ianuarie 2019 04:08:57
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <fstream>
#include <math.h>
#include <algorithm>
#define e 0.0001
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
int n, i, j;

struct punct
{
    double x,y;
};
punct v[1010];

bool compar(punct a, punct b)
{
    if ( fabs(a.x-b.x) >= e )
        return (a.x<b.x);
    return (a.y<b.y);
}


bool bs(punct a, int st, int dr)
{
    int mij = st+(dr-st)/2;
    if(fabs(a.x-v[mij].x)<e&&fabs(a.y-v[mij].y)<e)
    {
        return 1;
    }
    else
    {
        if(st>dr)
        {
            return 0;
        }
        else
        {
            if(compar(a,v[mij])==1)
            {
                bs(a,st,mij-1);
            }
            else
            {
                bs(a,mij+1,dr);
            }
        }
    }
}

int main()
{
    double  dx, dy;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i].x>>v[i].y;
    }
    sort(v+1,v+n+1,compar);
    int ans=0;
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
        {
            punct mij,x1,x2;
            mij.x=(v[i].x+v[j].x)/2;
            mij.y=(v[i].y+v[j].y)/2;
            dx=fabs(mij.x-v[i].x);
            dy=fabs(mij.y-v[i].y);
            if(v[i].y<v[j].y)
            {
                x1.x=mij.x+dy;
                x1.y=mij.y-dx;
                x2.x=mij.x-dy;
                x2.y=mij.y+dx;
            }
            else
            {
                x1.x=mij.x-dy;
                x1.y=mij.y-dx;
                x2.x=mij.x+dy;
                x2.y=mij.y+dx;
            }

            if(bs(x1,1,n)==1&&bs(x2,1,n)==1)
            {
                ans++;
            }
        }

    fout<<ans/2;

    return 0;
}