Pagini recente » Cod sursa (job #985668) | Cod sursa (job #1052927) | Cod sursa (job #486002) | Cod sursa (job #120715) | Cod sursa (job #681700)
Cod sursa(job #681700)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
//m ( x2 - x1 ) = y2 - y1
//m =
class fractie
{
public:
fractie(): numar(0), numi(0) {}
fractie(int numarS, int numiS): numar(numarS), numi(numiS){}
bool operator<(fractie f2) const
{
return (f2.numi * numar < f2.numar * numi);
}
bool operator==(fractie f2)
{
return (f2.numi * numar == f2.numar * numi);
}
int numar,numi;
};
#define MAXN 105
int main()
{
FILE *in = fopen("trapez.in", "r");
FILE *out = fopen("trapez.out", "w");
int i, j, n, x[MAXN], y[MAXN], npante = 0;
fractie pante[MAXN * MAXN];
fscanf(in, "%i", &n);
for(i = 1; i <= n; i++)
{
fscanf(in, "%i %i", &x[i], &y[i]);
for(j = 1; j < i; j++)
{
if(x[i] != x[j])
pante[++npante] = fractie(y[j] - y[i], x[j] - x[i]);
}
}
sort(pante + 1, pante + npante + 1);
int nraux = 0, nrFinal = 0;
fractie curent(-1, -1);
for(i = 1; i <= npante; i++)
if(pante[i] == curent)
nraux++;
else
{
nrFinal += nraux * (nraux - 1) / 2;
nraux = 1;
curent = pante[i];
}
nrFinal += nraux * (nraux - 1) / 2;
fprintf(out, "%i", nrFinal);
}