Cod sursa(job #798710)

Utilizator vlad96Vlad Zuga vlad96 Data 16 octombrie 2012 23:38:44
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
#include <fstream>
#include <algorithm>
#include <cmath>
#define EPS 0.000001

using namespace std;

int n, sol;

struct punct {double x,y;};

punct v[1010];

inline bool sortare (punct a, punct b)
{
    if (fabs(a.x-b.x)<EPS)
        return a.y<b.y;
    return a.x<b.x;
}

inline bool exista (punct a)
{
    int st, dr, mij;
    st = 1;
    dr = n;
    while (st<=dr)
    {
        mij = (st+dr)/2;
        if (fabs(v[mij].x-a.x) < EPS && fabs(v[mij].y-a.y) < EPS )
            return true;
        if ( sortare(v[mij], a) == true )
            st = mij + 1;
        else
            dr = mij - 1;
    }
    return false;
}

int main ()
{
    int i, j;
    punct a,b;

    ifstream g("patrate3.in");
    g>>n;
    for ( i = 1; i <= n; i ++ )
        g>>v[i].x>>v[i].y;
    g.close();

    sort(v+1, v+n+1, sortare);
    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 ( exista(a) && exista(b) )
                sol ++;
        }
    }
    sol /= 2;

    ofstream f("patrate3.out");
    f<<sol;
    f.close();
    return 0;
}