Pagini recente » Cod sursa (job #1799533) | Cod sursa (job #1912880) | Cod sursa (job #831382) | Cod sursa (job #1234044) | Cod sursa (job #2083136)
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <limits>
using namespace std;
FILE* fin;
FILE* fout;
int n;
float pante[1000000];
struct Point
{
long long x;
long long y;
} V[1000];
bool floatEqual(float a, float b)
{
float epsilon = 1e-5;
if(abs(a - b) < epsilon)
return 1;
return 0;
}
float computeGradient(Point a, Point b)
{
if(a.x == b.x)
return std::numeric_limits<float>::max();
return (float)(a.y - b.y) / (a.x - b.x);
}
int main()
{
fin = fopen("trapez.in", "r");
fout = fopen("trapez.out", "w");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i)
fscanf(fin, "%llu %llu", &V[i].x, &V[i].y);
int k = 0;
for(int i = 0; i < n - 1; ++i)
for(int j = i + 1; j < n; ++j)
pante[k++] = computeGradient(V[i], V[j]);
sort(pante, pante + k);
int nr = 0;
int streak = 1;
for(int i = 1; i < k; ++i)
{
if(floatEqual(pante[i], pante[i - 1]))
++streak;
else
{
nr += (streak - 1) * streak / 2;
streak = 1;
}
}
nr += (streak - 1) * streak / 2;
fprintf(fout, "%d", nr);
return 0;
}