Pagini recente » Cod sursa (job #1214821) | Cod sursa (job #2051049) | Statistici Natalia Elena Tomsa (Natalia_T) | Cod sursa (job #184931) | Cod sursa (job #2445462)
#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 ;
}