Cod sursa(job #2445462)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 4 august 2019 10:07:13
Problema Trapez Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <vector>
#include <algorithm>

#define NMAX 1000

using namespace std;

struct Point {
  long long x ;
  long long y ;
} ;

struct dreapta {
  Point A ;
  Point B ;
} ;

Point panta (dreapta a, dreapta b) {
  Point rez ;
  rez.x = ( a.A.y - a.B.y ) * (b.A.x - b.B.x ) ;
  rez.y = ( a.A.x - a.B.x ) * (b.A.y - b.B.y ) ;
  return rez ;
}

bool cmp (dreapta a, dreapta b ) {
  return ( panta(a, b).x <= panta(a,b).y ) ;
}

Point v [ NMAX + 1 ] ;
vector <dreapta> vect ;

int main() {

  FILE *fin, *fout ;
  fin = fopen ("trapez.in", "r" ) ;
  fout = fopen ("trapez.out", "w" ) ;
  long long n, i, j, rez, l ;
  fscanf (fin, "%lld", &n ) ;
  for (i = 1 ; i <= n ; i++ )
    fscanf (fin, "%lld%lld", &v[i].x, &v[i].y ) ;
  for (i = 1 ; i <= n ; i++ ) {
    for (j = i + 1 ; j <= n ; j++ ) {
      vect.push_back({v[i], v[j]}) ;
    }
  }
  sort(vect.begin(), vect.end(), cmp) ;
  rez = 0 ;
  l = 1 ;
  for (i = 0 ; i < vect.size()-1 ; i++ ) {
    if (panta(vect[i], vect[i+1]).x == panta(vect[i], vect[i+1]).y ) {
      l++;
      rez += l-1 ;
    }
    else
      l = 1 ;
  }
  fprintf (fout, "%lld", rez ) ;
  return 0 ;
}