Cod sursa(job #798703)

Utilizator vlad96Vlad Zuga vlad96 Data 16 octombrie 2012 23:23:56
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#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;

    FILE *fis = fopen ("patrate3.in" ,"r");
    fscanf(fis, "%d\n", &n);
    for ( i = 1; i <= n; i ++ )
        fscanf(fis, "%d %d", &v[i].x, &v[i].y);
    fclose(fis);

    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;

    FILE *fis2 = fopen ("patrate3.out", "w");
    fprintf(fis2, "%d\n", sol);
    fclose(fis2);
    return 0;
}