Cod sursa(job #2876441)

Utilizator YusyBossFares Yusuf YusyBoss Data 23 martie 2022 11:39:43
Problema Trapez Scor 50
Compilator cpp-64 Status done
Runda masonii Marime 1.05 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#define NMAX 1000

using namespace std;

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

map <pair<int, int>, int> mp;
pair <int, int> v[NMAX + 1];

int fcmmdc(int a, int b) {
  int r;
  a = a < 0 ? -a : a;
  b = b < 0 ? -b : b;
  return __gcd(a, b);
}

int main() {
  int n, i, j, sol, a, b, gcd, val;
  cin >> n;

  for (i = 0; i < n; i++)
    cin >> v[i].first >> v[i].second;

  sol = 0;
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      a = v[i].second - v[j].second;
      b = v[i].first - v[j].first;

      gcd = fcmmdc(a, b);
      a /= gcd;
      b /= gcd;

      a = ((b == 0) ? 0 : a);

      if (b < 0)
        b = -b, a = -a;

      auto it = mp.find({a, b});
      if (it != mp.end()) {
        it->second++;
        val = it->second;
        sol -= (val - 1) * (val - 2) / 2;
        sol += val * (val - 1) / 2;
      }
      else
        mp.insert({{a, b}, 1});
    }
  }

  cout << sol;
  return 0;
}