Cod sursa(job #2824565)

Utilizator lolismekAlex Jerpelea lolismek Data 2 ianuarie 2022 17:40:41
Problema Trapez Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <unordered_map>

#define pii pair <int, int>

using namespace std;

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

const int N = 1000;
pii puncte[N + 1];
unordered_map <double, int> umap;

double panta(pii a, pii b){
    if(a.second - b.second == 0) return -1;
    double x1 = a.first, x2 = b.first, y1 = a.second, y2 = b.second;
    return ( (double)((x1 - x2) / (y1 - y2)) );
}

int main(){
    int n;
    fin >> n;
    for(int i = 0; i < n; i++) fin >> puncte[i].first >> puncte[i].second;
    for(int i = 0; i < n; i++)
        for(int j = i + 1; j < n; j++)
            umap[panta(puncte[i], puncte[j])]++;
    int ans = 0;
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            int nr = umap[panta(puncte[i], puncte[j])];
            cout << ">>> " << i << " " << j << " " << nr << endl;
            ans += nr * (nr - 1) / 2; // Combinat de nr luate cate 2 aka suma gauss pt (n - 1)
            umap[panta(puncte[i], puncte[j])] = 1;
        }
    }
    fout << ans;
    return 0;
}