Pagini recente » Cod sursa (job #2321509) | Cod sursa (job #1401878) | Cod sursa (job #1221783) | Cod sursa (job #1111839) | Cod sursa (job #1017167)
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
using namespace std;
#define EPS 0.000000000001
#define NMax 1001
double INFINIT = 1.0 * (1 << 30);
using namespace std;
struct punct
{
int x, y;
};
int compare(const void *a, const void *b)
{
return (*(double*)a - *(double*)b);
}
double calculezPanta (punct A, punct B)
{
if (A.x == B.x)
{
return INFINIT;
}
else
return 1.0 * ((1.0 * (A.y - B.y)) / (1.0 * (A.x - B.x)));
}
int main()
{
int n; punct p[NMax];
FILE *f = fopen("trapez.in", "r");
FILE *g = fopen("trapez.out", "w");
fscanf(f, "%d", &n);
for (int i = 0; i < n; i++)
{
fscanf(f, "%d %d", &p[i].x, &p[i].y);
}
double pante[NMax*NMax]; int k = 0;
for (int i = 0; i < n-1; i++)
{
for (int j = i+1; j < n; j++)
{
pante[k++] = calculezPanta (p[i], p[j]);
}
}
sort( pante, pante + k );
//qsort(pante, k, sizeof(double), compare);
int nr = 1, nrTrapeze = 0;
for (int i = 0; i < k; i++)
{
if (pante[i+1] == pante[i] && pante[i] != INFINIT)
nr++;
else
{
nrTrapeze += nr * (nr - 1) / 2;
nr = 1;
}
}
fprintf(g, "%d", nrTrapeze);
fclose(f); fclose(g);
return 0;
}