Cod sursa(job #1552455)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 18 decembrie 2015 00:24:52
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>
#include <algorithm>

#define DIM 1024
#define x first
#define y second
using namespace std;

int Y1, y2, y3, y4;
int x1, x2, x3, x4;
int N, nr; double X, Y;
pair <int, int> P[DIM];

inline int findValue (int X, int Y) {
    int st = 1, dr = N, mid;

    while (st <= dr) {
        mid = st + (dr - st) / 2;

        if (P[mid].x == X && P[mid].y == Y)
            return 1;

        if (P[mid].x < X || (P[mid].x == X && P[mid].y < Y))
            st = mid + 1;
        else
            dr = mid - 1;
    }

    return 0;
}

inline int abs (int X) {
    return X > 0 ? X : -X;
}

int main () {

    freopen ("patrate3.in" ,"r", stdin );
    freopen ("patrate3.out","w", stdout);

    scanf ("%d", &N);
    for (int i = 1; i <= N; i ++) {
        scanf ("%lf %lf", &X, &Y);
        X += 10000; Y += 10000;
        P[i].x = (int)(X * 100000);
        P[i].y = (int)(Y * 100000);
    }

    sort (P + 1, P + N + 1);

    for (int i =   1  ; i <= N; i ++) {
    for (int j = i + 1; j <= N; j ++) {
        x1 = P[i].x; Y1 = P[i].y;
        x2 = P[j].x; y2 = P[j].y;
        if (Y1 < y2) {
            x3 = (x1 + x2) / 2 + abs ((Y1 + y2) / 2 - Y1);
            y3 = (Y1 + y2) / 2 - abs ((x1 + x2) / 2 - x1);
            x4 = (x1 + x2) / 2 - abs ((Y1 + y2) / 2 - Y1);
            y4 = (Y1 + y2) / 2 + abs ((x1 + x2) / 2 - x1);
        } else {
            x3 = (x1 + x2) / 2 - abs ((Y1 + y2) / 2 - Y1);
            y3 = (Y1 + y2) / 2 - abs ((x1 + x2) / 2 - x1);
            x4 = (x1 + x2) / 2 + abs ((Y1 + y2) / 2 - Y1);
            y4 = (Y1 + y2) / 2 + abs ((x1 + x2) / 2 - x1);
        }

        if (findValue (x3, y3) && findValue (x4, y4))
            nr ++;
    }}

    printf ("%d\n", nr);

    return 0;
}