Cod sursa(job #1731227)

Utilizator GoogalAbabei Daniel Googal Data 18 iulie 2016 16:07:34
Problema Patrate 3 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
const int NMAX = 1000;
struct punct{
    int x,y;
};
punct v[NMAX + 5];

int n,sol;

class HASH{
    public:
        vector<int> H[660097 + 5];
        void add(int val){
            int key = val % 660097;
            if(key < 0)
                key = -key;
            H[key].push_back(val);
        }
        bool is_in_hash(int val){
            int key = val % 660097;
            if(key < 0)
                key = -key;
            for(int i = 0 ; i < H[key].size() ; ++i)
                if(H[key][i] == val)
                    return true;
            return false;
        }
};
HASH hx,hy;

void read_a(int* a)
{

    int sgn = 1;
    char c;
    fin>>c;
    *a = 0;
    if(c == '-'){
        sgn = -1;
        fin>>c;
    }
        while(c != '.'){
            *a = *a * 10 + (c -'0');
            fin>>c;
        }
        for(int i = 1 ; i <= 4 ; ++i){
            fin>>c;
            *a = *a * 10 + (c - '0');
        }
    *a = *a * sgn;
}

void read()
{

    fin>>n;
    int a,b;
    for(int i = 1 ; i <= n ; ++i){
        read_a(&a);
        read_a(&b);
        v[i].x = a;
        v[i].y = b;
        hx.add(v[i].x);
        hy.add(v[i].y);
    }

}

int main()
{

    read();
    for(int i = 1 ; i < n ; ++i)
        for(int j = i + 1; j <= n ; j++)
        {
            int ax = v[i].x + v[i].y - v[j].y;
            int ay = v[i].y + v[j].x - v[i].x;
            int bx = v[j].x + v[i].y - v[j].y;
            int by = v[j].y + v[j].x - v[i].x;
            if(hx.is_in_hash(ax) && hx.is_in_hash(bx) && hy.is_in_hash(ay) && hy.is_in_hash(by))
                ++sol;
        }
    fout<<sol/2;
    return 0;
}