Cod sursa(job #1068082)

Utilizator tudorv96Tudor Varan tudorv96 Data 27 decembrie 2013 21:30:06
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.27 kb
#include <fstream>
#include <map>
#include <string>
using namespace std;

typedef pair <int, int> coord;

const int N = 1005;

bool a[N][N];
map <coord, int> M;
coord v[N];
int n, p;

void get(coord a, coord b) {
    int Y = a.first - b.first, X = a.second - b.second;
    map <coord, int> :: iterator it1, it2, it3, it4;
    it1 = M.find(make_pair (a.first + X, a.second - Y));
    it2 = M.find(make_pair (b.first + X, b.second - Y));
    it3 = M.find(make_pair (a.first - X, a.second + Y));
    it4 = M.find(make_pair (b.first - X, b.second + Y));
    if (it1 != M.end() && it2 != M.end()) {p++;}
    if (it3 != M.end() && it4 != M.end()) {p++;}
}

int convert (string s) {
    int x = 0, sign = ((s[0] == '-') ? -1 : 1);
    for (unsigned i = 0; i < s.size(); ++i)
        if (s[i] >= '0' && s[i] <= '9')
            x = x * 10 + s[i] - '0';
    return x * sign;
}

int main() {
    ifstream fin ("patrate3.in");
    ofstream fout ("patrate3.out");
    fin >> n;
    for (int i = 0; i < n; ++i) {
        string s[2];
        fin >> s[0] >> s[1];
        int a = convert(s[0]), b = convert(s[1]);
        v[i] = make_pair (a, b);
        M[v[i]] = i;
        for (int j = 0; j < i; ++j)
            get (v[j], v[i]);
    }
    fout << (p >> 1);
}