Cod sursa(job #797346)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 13 octombrie 2012 21:20:57
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<stdio.h>
#include<math.h>
#include<fstream>
#include<algorithm>

using namespace std;

#define MAXN 10002
#define EPS 0.000001

typedef struct
{
    double X, Y;
} point;

point v[ MAXN ];
point P;
int n, i, j, res;
double X1, X2, X3, X4, Y1, Y2, Y3, Y4, l;

inline int cmp(point i, point j)
{
    if(fabs(i.X - j.X) < EPS)
        return (i.Y < j.Y);
    return (i.X < j.X);

}

inline int search_value(point P)
{
    int st, end, mid, i;
    st = 1, end = n;

    while(st <= end)
    {
        mid = (st + end) / 2;
        if( fabs(P.X - v[mid].X) < EPS && fabs(P.Y - v[mid].Y) < EPS )
            return 1;

        if(cmp(v[mid], P))
           st = mid + 1;
        else end = mid - 1;
    }

    return 0;
}

int main()
{
    ifstream f("patrate3.in");

    f >> n;

    for(i = 1; i <= n; ++i)
        f >> v[i].X >> v[i].Y;

    f.close();

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

    for(i = 1; i < n; ++i)
            for(j = i + 1; j <= n; ++j)
            {
                X1 = v[i].X, Y1 = v[i].Y;
                X2 = v[j].X, Y2 = v[j].Y;

                X3 = X1 + Y1 - Y2;
                Y3 = Y1 + X2 - X1;

                X4 = X2 + Y1 - Y2;
                Y4 = Y2 + X2 - X1;

                P.X = X3, P.Y = Y3;


                if(search_value(P))
                {
                    P.X = X4, P.Y = Y4;
                    if(search_value(P))
                        ++res;
                }
            }

     res /= 2;

     FILE *g = fopen("patrate3.out", "w");

     fprintf(g, "%d\n", res);

     fclose(g);
}