Pagini recente » Cod sursa (job #541435) | Cod sursa (job #2103478) | Cod sursa (job #1323964) | Cod sursa (job #2081175) | Cod sursa (job #1095844)
/*
* File: trapez.cpp
* Author: Vlad
*
* Created on January 31, 2014, 11:37 PM
*/
#include <cstdio>
#include <algorithm>
using namespace std;
typedef struct _point {
float x, y;
} Point;
int n;
int verticalSlopesCount;
Point p[1002];
int computeSlopes(float slopes[]) {
verticalSlopesCount = 0;
int idx = 0;
for (int i = 1; i < n; i++) {
Point *p1 = p + i;
for (int j = i + 1; j <= n; j++) {
if (p1->x != p[j].x) {
slopes[idx++] = (p[j].y - p1->y) / (p[j].x - p1->x);
} else verticalSlopesCount++;
}
}
return idx;
}
int main(int argc, char** argv) {
freopen("trapez.in", "r", stdin);
freopen("trapez.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%f %f", &p[i].x, &p[i].y);
}
// combinari de n luate cate 2
float *slopes = new float[n / 2 * (n - 1)];
long long total = computeSlopes(slopes);
sort(slopes, slopes + total);
long long trapeze = verticalSlopesCount / 2 * (verticalSlopesCount - 1);
long long equal = 1;
for (int i = 0; i < total - 1; ++i) {
if (slopes[i + 1] - slopes[i] < 0.00001) equal++;
else {
// combinari de n luate cate 2
trapeze += (equal / 2 * (equal - 1));
equal = 1;
}
}
trapeze += (equal / 2 * (equal - 1));
printf("%l\n", trapeze);
delete[] slopes;
return 0;
}