Pagini recente » Cod sursa (job #1502472) | Cod sursa (job #77483) | Cod sursa (job #2981441) | Cod sursa (job #1818108) | Cod sursa (job #681715)
Cod sursa(job #681715)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <windows.h>
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 - 1) / 2 + 100];
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]);
}
}
bool viz[(MAXN * (MAXN - 1)) / 2 + 100];
int nraux = 0, nrFinal = 0;
memset(viz, 0, sizeof(bool[(MAXN * (MAXN - 1)) / 2 + 100]));
for(i = 1; i < npante; i++)
if(viz[i] == 0)
{
nraux = 1;
for(j = i + 1; j <= npante; j++)
{
if(pante[i] == pante[j])
{
viz[j] = 1;
nraux++;
}
}
nrFinal += nraux * (nraux - 1) / 2;
}
/*sort(pante + 1, pante + npante + 1);
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);
}