Cod sursa(job #2616446)

Utilizator DeliaGhergheGherghe Ioana-Delia DeliaGherghe Data 18 mai 2020 15:55:33
Problema Patrate 3 Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#define eps 0.00001
using namespace std;

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

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

bool find_p(int st, int dr, punct p)
{
    if (st <= dr)
    {
        int mij = (st + dr)/2;
        if (abs(v[mij].x - p.x) < eps && abs(v[mij].y - p.y) < eps)
            return 1;
        if (!cmp(v[mij],p))
            return find_p(st, mij - 1, p);
        else return find_p(mij+1, dr, p);
    }
    else return 0;

}

int main()
{
    ifstream fin("patrate3.in");
    ofstream fout("patrate3.out");
    int N,i,j,rez = 0;
    punct a,b;
    fin >> N;
    for (i = 1; i <= N; i++)
        fin >> 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++)
        {
            a.x = v[i].x + v[i].y - v[j].y;
            a.y = v[i].y + v[j].x - v[i].x;
            b.x = v[j].x + v[i].y - v[j].y;
            b.y = v[j].y + v[j].x - v[i].x;
            if (find_p(1,N,a) && find_p(1,N,b))
                rez++;
        }
    fout << rez/2;
    fin.close();
    fout.close();
    return 0;
}