Cod sursa(job #2624949)

Utilizator DenisaCantuCantu Denisa DenisaCantu Data 5 iunie 2020 16:58:19
Problema Patrate 3 Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");

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


int cmp(punct a, punct b)
{
    return a.x<b.x;
}
double caut(double a, double b)
{
    int st = 1, dr = n, mid;
    while(st <= dr)
    {
        mid = (st + dr) / 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)
        {
            st = mid + 1;
        }
        else
        {
            dr = mid - 1;
        }
    }
    return 0;
}
int main()
{
    f>> n;
    double valx, valy;
    for(i = 1; i <= n; i++)
    {
        f>> valx >> valy;
        v[i].x = round(valx * 10000);
        v[i].y = round(valy * 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(caut(mid.x - dy, mid.y + dx) == 1 && caut(mid.x + dy, mid.y - dx) == 1)
            {
                nr++;
            }
        }
    }
    g<< nr / 2;
    return 0;
}