Cod sursa(job #2876442)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 23 martie 2022 11:40:33
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda masonii Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1000;

struct points {
  int x, y;

  bool operator == (const points &val) const {
    return (x == val.x && y == val.y);
  }
};

points v[NMAX + 2];
points seg[NMAX * NMAX + 2];

bool cmp (points A, points B) {
  return A.x * B.y < B.x * A.y;
}

points tgSeg(points a, points b){
  int difx = a.x - b.x;
  int dify = a.y - b.y;
  int gcd = __gcd(difx, dify);

  return {difx / gcd, dify / gcd};
}

int main() {
  int n, i, j, nrSeg;
  fin >> n;

  for (i = 1; i <= n; ++i)
    fin >> v[i].x >> v[i].y;

  nrSeg = 0;
  for (i = 1; i <= n; ++i)
    for (j = 1 + i; j <= n; ++j)
      seg[++nrSeg] = tgSeg(v[i], v[j]);

  sort (seg + 1, seg + nrSeg + 1, cmp);

  int ans = 0;
  int cnt = 1;
  for (i = 1; i <= nrSeg; ++i) {
    if (seg[i] == seg[i + 1])
      ++cnt;
    else {
      ans = ans + (cnt - 1) * cnt / 2;
      cnt = 1;
    }
  }
  fout << ans;
  return 0;
}