Cod sursa(job #2415307)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 25 aprilie 2019 19:15:50
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("patrate3.in");
ofstream fout("patrate3.out");

const int NMAX = 1005;
int rasp=0,n;

struct coord
{
    double x;
    double y;
};

coord v[NMAX];

bool cmp(coord a,coord b)
{
    if(a.x==b.x) return a.y>b.y;
    return a.x>b.x;
}

bool cautbin(coord a)
{
    int st=1,dr=n,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a.x==v[mij].x and a.y==v[mij].y)
            return 1;
        if(cmp(v[mij],a)==1) st=mij+1;
        else dr=mij-1;
    }
    return 0;
}

void verif(coord p1,coord p2)
{
    coord mij;
    mij.x=(p1.x+p2.x)/2;
    mij.y=(p1.y+p2.y)/2;
    coord a,b;
    double mx=abs(p1.x-mij.x);
    double my=abs(p1.y-mij.y);
    if(p1.y>p2.y)
    {
        a.x=mij.x-my;
        a.y=mij.y+mx;
        b.y=mij.y-mx;
        b.x=mij.x+my;
    }
    else
    {
        a.x=mij.x-my;
        a.y=mij.y-mx;
        b.y=mij.y+mx;
        b.x=mij.x+my;
    }
    if(cautbin(a)==1 and cautbin(b)==1) rasp++;
}

int main()
{
    fin >> n;
    double aa,bb;
    for(int i=1;i<=n;i++)
    {
        fin >> aa >> bb;
        v[i].x=round(aa*10000.0);
        v[i].y=round(bb*10000.0);
    }
    sort(v+1,v+n+1,cmp);
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            verif(v[i],v[j]);
        }
    }
    fout << rasp/2;
    return 0;
}