Cod sursa(job #2876342)

Utilizator TghicaGhica Tudor Tghica Data 23 martie 2022 10:58:30
Problema Trapez Scor 20
Compilator cpp-64 Status done
Runda masonii Marime 1.2 kb
#include <fstream>
#include <algorithm>
#include <cmath>

#define int long long

using namespace std;

ifstream cin("trapez.in");
ofstream cout("trapez.out");

struct punct {
  int x, y;
}v[1001];

struct dreapta {
  int p1, p2;
  int asus, ajos;
}d[1000001];

bool cmpa(dreapta a, dreapta b) {
  return a.asus * b.ajos < b.asus * a.ajos;
}

bool verif2PanteEgale(dreapta a, dreapta b) {
  return a.asus * b.ajos == b.asus* a.ajos;
}


signed main() {
  int n, k, i, j, vertical, rez, l;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> v[i].x;
    cin >> v[i].y;
  }
  k = 0;
  vertical = 0;
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j <= n; j++) {
      if (v[i].x == v[j].x) {
        vertical++;
        continue;
      }
      k++;
      d[k].p1 = i;
      d[k].p2 = j;
      d[k].asus = v[j].y - v[i].y;
      d[k].ajos = v[i].x - v[j].x;
    }
  } 
  sort(d + 1, d + k + 1, cmpa);
  rez = (vertical * (vertical - 1)) / 2;
  l = 1;
  for (i = 2; i <= k; i++) {
    if (verif2PanteEgale(d[i], d[i - 1])) {
      l++;
    }
    else {
      rez += (l * (l - 1)) / 2;
      l = 1;
    }
  }
  rez += (l * (l - 1)) / 2;
  cout << rez;
  return 0;
}