Pagini recente » Cod sursa (job #816819) | Cod sursa (job #697761) | Cod sursa (job #75863) | Cod sursa (job #1542824) | Cod sursa (job #1237298)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
#define Nmax 1000
#define EPS 0.0000000000001
struct punct {int x, y;} v[Nmax];
struct panta
{
double x;
friend bool operator <(panta p1, panta p2)
{
return p1.x < p2.x;
}
friend bool operator ==(panta p1, panta p2)
{
return abs(p1.x - p2.x) < EPS;
}
} p[Nmax * Nmax], aux;
int main()
{
int i, j, n, k = 0, OX = 0, OY = 0;
long long nr, sol = 0;
fin >> n;
for(i = 0; i < n; ++i)
{
fin >> v[i].x >> v[i].y;
for(j = 0; j < i; ++j)
{
if(v[i].x == v[j].x) ++OY;
else if(v[i].y == v[j].y) ++OX;
else
{
p[k++].x = 1.0 * (v[i].y - v[j].y) / (v[i].x - v[j].x);
}
}
}
sort(p, p + k);
aux.x = 0;
for(i = 0; i < k;)
{
aux = p[i]; nr = 0;
while(p[i] == aux && i < k) ++i, ++nr;
sol += nr * (nr - 1) / 2;
}
sol += OX * (OX - 1) / 2;
sol += OY * (OY - 1) / 2;
fout << sol << '\n';
return 0;
}