Cod sursa(job #3361448)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 24 iulie 2026 14:02:55
Problema Patrate 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <bits/stdc++.h>
#define ld double
#define eps ((ld)1e-8)
//#pragma GCC optimize("O1")

using namespace std;

ifstream fin("patrate3.in");
ofstream fout("patrate3.out");

struct Point{
    ld x,y;

    bool operator<(const Point &p1) const{
        if(p1.x != x ) return x< p1.x;
        return y + eps < p1.y;
    }

    bool operator !=(const Point &p1) const{
        return p1.x != x || p1.y != y;
    }
};

ostream & operator<<(ostream & f, const Point &p1){
    f << "(" << p1.x << " , " << p1.y << ")";
    return f;
}

struct Dia{
    Point mid;
    ld m;
    ld len;

    Dia(const Point &p1, const Point &p2)
    {
        mid = {(p1.x+ p2.x) / 2, (p1.y + p2.y) / 2};
        ld dx = p1.x - p2.x;
        ld dy = p1.y - p2.y;
        m = dy / dx;
        len = dx * dx + dy * dy;///nu ma intersesaza exact sqrt, sunt golan
    }

    Dia(Point p1, ld m1, ld l1){
        mid = p1;
        m = m1;
        len = l1;
    }

    bool operator <(const Dia &d1) const{
        if(mid != d1.mid) return mid < d1.mid;
        if(m + eps!= d1.m) return m + eps < d1.m;
        return len + eps < d1.len;
    }

    Dia inv() const {
        return Dia(mid, -1/m, len);
    }
};

//ostream & operator<<(ostream & x, const Dia & d){
//    x << "{ "<< d.mid << ", " << d.dx << "/" << d.dy << ", "<<d.len << " }";
//    return x;
//}

int N;
vector <Point> a;

map <Dia, short int> freq;

long long ans = 0;

void read()
{
    fin >> N;
    a.resize(N);
    for(int i=0;i<N;i++){
        fin >> a[i].x >> a[i].y;
    }
}

void solve()
{
    for(int i=0;i<N;i++){
        for(int j= 0;j < i;j++){
            Dia d(a[i], a[j]);
            freq[d]++;
        }
    }
    for(auto [d,cnt] : freq){
        auto it = freq.find(d.inv());
        if(it != freq.end()){
            ans +=  1ll * it->second * cnt;
        }
    }
    ans /=2;
}

void write()
{
    fout << ans;
}

int main()
{
    read();
    solve();
    write();
}