Cod sursa(job #2734938)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 1 aprilie 2021 17:40:30
Problema Trapez Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include<map>

using namespace std;

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

map<pair<int, int>, int> fr;
int n;
pair<int, int> puncte[1005];

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;
            if (frac.second < 0) {
                frac.first *= -1;
                frac.second *= -1;
            }
            fr[frac]++;
        }
    }
    long long sol = 0;
    for (auto nr:fr)
        sol += nr.second * (nr.second - 1) / 2;
    g << sol;
    return 0;
}