Pagini recente » Cod sursa (job #1354254) | Cod sursa (job #2090627) | Cod sursa (job #1269806) | Cod sursa (job #2490673) | Cod sursa (job #867301)
Cod sursa(job #867301)
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#define eps 1E-14
#define INF 1E30
using namespace std;
class Point {
private:
long x, y;
public:
Point() {x = y = 0;}
Point(long a, long b) {x = a; y = b;}
void set(long a, long b) {x = a; y = b;}
double operator()(Point p) {
double panta;
if(x == p.x)
panta = INF;
else
panta = ((double)p.y - y) / ((double)p.x - x);
return panta;
}
};
bool cmp(double d1, double d2) {
return (d1 - d2) <= -eps;
}
long n;
Point p[1001];
vector<double> pante;
long total, momentan;
double pcrt;
int main() {
long i, j, x, y;
double pant;
vector<double>::iterator it;
freopen("trapez.in", "r", stdin);
freopen("trapez.out", "w", stdout);
scanf("%ld", &n);
for(i = 1; i <= n; i++) {
scanf("%ld%ld", &x, &y);
p[i].set(x, y);
}
for(i = 1; i <= n; i++)
for(j = i + 1; j <= n; j++) if(i != j) {
pant = p[i](p[j]);
pante.push_back(pant);
}
sort(pante.begin(), pante.end(), cmp);
pcrt = pante[0];
total = 0;
momentan = 1;
for(it = pante.begin() + 1; it != pante.end(); it++) {
if(fabs(pcrt - *it) < eps)
momentan++;
else {
pcrt = *it;
total += (momentan * (momentan - 1)) / 2;
momentan = 1;
}
}
total += (momentan * (momentan - 1)) / 2;
printf("%ld", total);
return 0;
}