Cod sursa(job #1981256)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 15 mai 2017 11:55:12
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int N;
double eps = 1e-4;
struct punct
{
    double x, y;
} p[1001], v[1001];
bool cmp(punct a, punct b)
{
    if(a.x == b.x) return a.y < b.y;
    return a.x < b.x;
}
void citire()
{
    f >> N;
    for(int i = 1; i <= N; i++)
    {
        f >> p[i].x >> p[i].y;
        p[i].x = round(p[i].x * 10000);
        p[i].y = round(p[i].y * 10000);
    }
}
bool cautbin(punct P)
{
    int st = 1, dr = N, m;
    while(st <= dr)
    {
        m = st + (dr - st) / 2;
        if(p[m].x == P.x && p[m].y == P.y) return 1;
        if((p[m].x == P.x && p[m].y < P.y) || p[m].x < P.x) st = m + 1;
        else dr = m - 1;
    }
    return 0;
}
void solve()
{
    sort(p + 1, p + N + 1, cmp);
    int nrp = 0;
    for(int i = 1; i < N; i++)
        for(int j = i + 1; j <= N; j++) //pct p[i] si p[j] sunt o diagonala
        {
            punct M, v1, v2;
            M.x = (p[i].x + p[j].x) / 2, M.y = (p[i].y + p[j].y) / 2;
            v1.x = M.x + p[i].y - M.y, v1.y = M.y + M.x - p[i].x;
            v2.x = M.x + M.y - p[i].y, v2.y = M.y + p[i].x - M.x;
            if(cautbin(v1) && cautbin(v2)) nrp++;
        }
    g << nrp / 2;
}
int main()
{
    citire();
    solve();
    return 0;
}