Cod sursa(job #1100377)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 6 februarie 2014 20:45:30
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.62 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);
}