Pagini recente » Cod sursa (job #2588053) | Cod sursa (job #1635250) | Cod sursa (job #2681886) | Cod sursa (job #2084403) | Cod sursa (job #1424273)
#include <stdio.h>
#include <math.h>
#include <algorithm>
const char inFile [] = "trapez.in";
const char outFile [] = "trapez.out";
const double eps = 1e-12;
const int INFI = 2e9;
struct Point {
int x,y;
};
void Read (Point& p) {
int a,b;
scanf("%d%d",&a,&b);
p.x = a, p.y = b;
return;
}
Point v[1001];
double p[1001 * 500 + 10];
double tan ( Point a, Point b ) {
int p,q;
p = a.x - b.x;
q = a.y - b.y;
if (!p) // vertical
return INFI + 1;
return (double) q / p * 1.0;
}
long long pairs (int objects) {
return 1LL * objects * (objects - 1) >> 1;
}
int main(int argc, const char * argv[]) {
freopen (inFile, "r", stdin);
freopen (outFile, "w", stdout);
short N;
int k;
long long Ans = 0;
scanf("%hd",&N);
for (short i=0; i < N; ++ i)
Read(v[i]);
for (short i = 0; i < N - 1; ++ i)
for (short j = i + 1; j < N; ++ j)
p[k ++] = tan (v[i],v[j]);
int l = 1;
std::sort (p, p + k);
for (int i=0; i < k - 1; ++ i) {
for (l = 1; i < k - 1 and fabs (p[i] - p[i+1]) < eps; ++ i, ++l);
Ans += pairs(l);
}
printf("%lld\n",Ans);
return 0;
}