Cod sursa(job #2313252)

Utilizator alexnigaNiga Alexandru alexniga Data 6 ianuarie 2019 15:12:00
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

ifstream f("patrate3.in");
ofstream g("patrate3.out");



struct punct
{
    double x, y;

} cord_puncte[1001];

int verifica(double a, double b)
{
    if(abs(a - b) < 0.00001)
        return 1;
    return 0;
}

int caut_bin(int left, int right, punct Z)
{
    int middle;
    while (left <= right)
    {
        middle = (left + right) / 2;

        if (verifica(Z.x, cord_puncte[middle].x) && verifica(Z.y, cord_puncte[middle].y))
            return 1;

        if (verifica(Z.x, cord_puncte[middle].x))
        {
            if (Z.y < cord_puncte[middle].y)
                right = middle - 1;
            else
                left = middle + 1;
        }
        else
        {
            if (Z.x < cord_puncte[middle].x)
                right = middle - 1;
            else
                left = middle + 1;

        }
    }
    return 0;
}

int cmp(punct A, punct B)
{
    if (A.x < B.x)
        return true;
    if (A.x == B.x)
        if (A.y < B.y)
            return true;
    return false;
}

int main()
{
    int n, i, j, nr = 0;
    punct mij, A, B;
    f >> n;

    for (i = 1; i <= n; i++)
        f >> cord_puncte[i].x >> cord_puncte[i].y;

    sort(cord_puncte + 1, cord_puncte + n + 1, cmp);

    for (i = 1; i < n; i++)
        for (j = i + 1; j <= n; j++)
        {
            mij.x = (cord_puncte[i].x + cord_puncte[j].x) / 2;
            mij.y = (cord_puncte[i].y + cord_puncte[j].y) / 2;
            A.x = mij.x + mij.y - cord_puncte[j].y;
            A.y = mij.y - mij.x + cord_puncte[j].x;
            B.x = mij.x - mij.y + cord_puncte[j].y;
            B.y = mij.y + mij.x - cord_puncte[j].x;
           // cout <<"333";
            if (caut_bin(1, n, A) && caut_bin(1, n, B))
                nr++;

        }
    /// nr = nr - 50;
    g << nr / 2;

    return 0;
}