Cod sursa(job #2734979)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 1 aprilie 2021 18:07:51
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include<vector>
#include<algorithm>

using namespace std;

ifstream f("trapez.in");
ofstream g("trapez.out");

int n;
pair<int, int> puncte[1005];
vector<pair<int, int>> pante;

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

int main() {
    f >> n;
    for (int i = 0; i < n; ++i) {
        f >> puncte[i].first >> puncte[i].second;
        for (int j = 0; j < i; ++j) {
            pair<int, int> frac;
            frac.first = puncte[i].second - puncte[j].second;
            frac.second = puncte[i].first - puncte[j].first;
            int cm = cmmdc(frac.first, frac.second);
            frac.first /= cm;
            frac.second /= cm;
            pante.emplace_back(frac);
        }
    }
    sort(pante.begin(), pante.end());
    long long sol = 0;
    int nrp = pante.size();
    for (int i = 0; i < nrp; ++i) {
        int j;
        for (j = i + 1; j < nrp && pante[i] == pante[j]; ++j);
        sol += (long long) (j - i) * (j - i - 1) / 2;
        i = j - 1;
    }
    g << sol;
    return 0;
}