Cod sursa(job #2876436)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 23 martie 2022 11:38:39
Problema Trapez Scor 0
Compilator cpp-64 Status done
Runda masonii Marime 1.43 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")

using namespace std;

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

const int MAX_N = 1005;

int n, len, sol;

struct point{
    int x, y;
} pct[MAX_N];

static inline bool cmpX(const point& p1, const point& p2){
    return p1.x < p2.x;
}

static inline bool cmpY(const point& p1, const point& p2){
    return p1.y < p2.y;
}

int mx, my;
int dx[MAX_N], dy[MAX_N];

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>pct[i].x>>pct[i].y;

    sort(pct+1, pct+n+1, cmpX);
    for(int i=1; i < n; i++)
        for(int j=i+1; j<=n; j++)
            dx[++mx] = pct[j].x - pct[i].x;

    sort(dx+1, dx+mx+1);
    len = 1;
    for(int i=2; i<=mx; i++){
        if(dx[i] == dx[i-1])
            len++;
        else{
            sol += len * (len-1) / 2;
            len = 1;
        }
    }
    sol += len * (len-1) / 2;

    sort(pct+1, pct+n+1, cmpY);
    for(int i=1; i < n; i++)
        for(int j=i+1; j<=n; j++)
            dy[++my] = pct[j].y - pct[i].y;

    sort(dy+1, dy+my+1);
    len = 1;
    for(int i=2; i<=my; i++){
        if(dy[i] == dy[i-1])
            len++;
        else{
            sol += len * (len-1) / 2;
            len = 1;
        }
    }
    sol += len * (len-1) / 2;

    fout<<sol;
    return 0;
}