Cod sursa(job #2625941)

Utilizator MARIAN.DANAILADanaila Marian MARIAN.DANAILA Data 6 iunie 2020 11:01:19
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<bits/stdc++.h>

using namespace std;

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

int n, i, j, nr, dx, dy;
struct punct
{
    int x, y;
} v[1005], mid;


bool cmp(punct a, punct b)
{
    if (a.x == b.x)return a.y < b.y;
    return a.x < b.x;
}
int binarySearch(int a, int b)
{
    int l = 1, r = n, mid;
    while(l <= r)
    {
        mid = (l + r) / 2;
        if(v[mid].x == a && v[mid].y == b)
        {
            return 1;
        }
        if((a == v[mid].x && v[mid].y < b) || v[mid].x < a)
        {
            l = mid + 1;
        }
        else
        {
            r = mid - 1;
        }
    }
    return 0;
}
int main()
{
    fin>> n;
    double vx, vy;
    for(i = 1; i <= n; i++)
    {
        fin>> vx >> vy;
        v[i].x = round(vx * 10000);
        v[i].y = round(vy * 10000);
    }



    sort(v + 1, v + n + 1, cmp);
    for(i = 1; i < n; i++)
    {
        for(j = i + 1; j <= n; j++)
        {
            mid.x = (v[i].x + v[j].x) / 2;
            mid.y = (v[i].y + v[j].y) / 2;
            dx = mid.x - v[i].x;
            dy = mid.y - v[i].y;
            if(binarySearch(mid.x - dy, mid.y + dx) == 1 && binarySearch(mid.x + dy, mid.y - dx) == 1)
            {
                nr++;
            }
        }
    }
    fout<< nr / 2;
    return 0;
}