Cod sursa(job #2792569)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 1 noiembrie 2021 22:10:16
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <chrono>

FILE *fin, *fout;

const int NMAX = 1e3;
const int INF = 1e9;

int N, ans;
std :: pair <int, int> v[NMAX + 1];
std :: vector <std :: pair <int, int>> p;

std :: pair<int, int> panta(std :: pair <int, int> a, std :: pair <int, int> b) {
    int gcd = std :: __gcd((a.second - b.second), (a.first - b.first));
    return {(a.second - b.second) / gcd, (a.first - b.first) / gcd};
}

int main() {
    fin = fopen("trapez.in", "r");
    fout = fopen("trapez.out", "w");

    fscanf(fin, "%d", &N);

    for(int i = 1; i <= N; i++) {
        int x, y;
        fscanf(fin, "%d %d", &x, &y);
        v[i] = {x, y};
    }

    for(int i = 1; i <= N; i++) {
        for(int j = i + 1; j <= N; j++) {
            p.push_back(panta(v[i], v[j]));
        }
    }

    std :: sort(p.begin(), p.end());

    int len = 1;
    std :: pair<int, int> last = p[0];
    for(int i = 1; i < p.size(); i++) {
        if(p[i] != last) {
            ans += len * (len - 1) >> 1;
            len = 1;
            last = p[i];
        } else {
            len++;
        }
    }

    fprintf(fout, "%d", ans);
    return 0;
}