Cod sursa(job #3359196)

Utilizator rares89_Dumitriu Rares rares89_ Data 26 iunie 2026 02:45:19
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

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

int n;
long long ans;
vector<pair<long long, long long> > p;
vector<pair<long long, long long> > v;

long long cmmdc(long long a, long long b) {
    while(b) {
        long long r = a % b;
        a = b;
        b = r;
    }
    return a;
}

int main() {
    fin >> n;

    p.resize(n);

    for(int i = 0; i < n; i++) {
        fin >> p[i].first >> p[i].second;
    }

    for(int i = 0; i < n; i++) {
        for(int j = i + 1; j < n; j++) {
            long long dx = p[j].first - p[i].first;
            long long dy = p[j].second - p[i].second;

            if(dx == 0) {
                dy = 1;
            } else if(dy == 0) {
                dx = 1;
            } else {
                if(dx < 0) {
                    dx = -dx;
                    dy = -dy;
                }

                long long g = cmmdc(abs(dx), abs(dy));
                dx /= g;
                dy /= g;
            }

            v.push_back({dx, dy});
        }
    }

    sort(v.begin(), v.end());

    for(int i = 0; i < v.size(); i++) {
        int j = i;

        while(j < v.size() && v[j] == v[i]) {
            j++;
        }

        long long cnt = j - i;
        ans += cnt * (cnt - 1) / 2;

        i = j - 1;
    }

    fout << ans << "\n";

    return 0;
}