Cod sursa(job #1453579)

Utilizator retrogradLucian Bicsi retrograd Data 23 iunie 2015 21:35:19
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
typedef int var;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");

#define Norm(a) a=(a+1e4)*1e4
typedef pair<var, var> Pair;
unordered_set<int64_t> Hash;
vector<Pair> Points;

#define in(v) (Hash.find(v) != Hash.end())
#define H(x,y) (x*1e9+y)
bool Patr(var i, var j) {
    var x1 = Points[i].first, x2 = Points[j].first,
        y1 = Points[i].second, y2 = Points[j].second;

    var dx = x2 - x1, dy = y1 - y2;
    var x3 = x2 + dy, y3 = y2 + dx,
        x4 = x1 + dy, y4 = y1 + dx;

    return (in(H(x3, y3)) && in(H(x4, y4)));
}

char buff[15];
void Read(var &a) {
    fin>>buff;
    a=0;
    bool s=0;
    var poz=0;
    if(buff[0] == '-') s=1, poz++;
    for(; buff[poz]; poz++)
        if(isdigit(buff[poz]))
            a = a * 10 + buff[poz] - '0';
    if(s) a = -a;
}

int main() {
    var n;
    fin>>n;

    var x, y;
    for(var i=1; i<=n; i++) {
        Read(x); Read(y);
        //x += 1e8; y += 1e8;
        Points.push_back(Pair(x, y));
        Hash.insert(H(x, y));
    }

    var cnt = 0;
    for(var i=0; i<n; i++) {
        for(var j=i+1; j<n; j++) {
            cnt += Patr(i, j);
            cnt += Patr(j, i);
        }
    }
    fout<<cnt / 4;
    return 0;
}