Cod sursa(job #2313955)

Utilizator mirunazMiruna Zavelca mirunaz Data 7 ianuarie 2019 17:57:38
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <map>
#include <cmath>
using namespace std;

#define M 10000

map <pair <int, int>, bool> c;

int main() {
    FILE *in = fopen("patrate3.in", "r");
    FILE *out = fopen("patrate3.out", "w");

    int n, i, j;
    //int x, y;

    fscanf(in, "%d", &n);
    pair <int, int> v[n];

    double x, y;

    for(i = 0; i < n; i ++) {
        fscanf(in, "%lf %lf", &x, &y);
        v[i] = {round(x * M * 2), round(y * M * 2)};
        /*fscanf(in, "%d.%d", &x, &y);
        v[i].first = 2 * (x * M + y);
        fscanf(in, "%d.%d", &x, &y);
        v[i].second = 2 * (x * M + y);*/
        c[v[i]] = true;
    }

    pair <int, int> m, c1, c2;
    int ct = 0;

    for(i = 0; i < n; i ++) {
        for(j = i + 1; j < n; j ++) {
            m.first = (v[i].first + v[j].first) / 2;
            m.second = (v[i].second + v[j].second) / 2;
            c1.first = m.first + (v[i].second - v[j].second) / 2;
            c1.second = m.second - (v[i].first - v[j].first) / 2;

            if(c.find(c1) != c.end()) {
                c2.first = m.first - (v[i].second - v[j].second) / 2;
                c2.second = m.second + (v[i].first - v[j].first) / 2;

                if(c.find(c2) != c.end()) {
                    ct ++;
                }
            }
        }
    }

    ct /= 2;
    fprintf(out, "%d", ct);

    return 0;
}