Pagini recente » Cod sursa (job #905022) | Cod sursa (job #2693680) | Cod sursa (job #469037) | Cod sursa (job #2812363) | Cod sursa (job #2291107)
#include<iostream>
#include<fstream>
#include <algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
double v[1010030];
int n, k;
struct coordonate_punct{
double x, y;
}p[1005];
int main()
{
int i, j;
f >> n;
for(i = 1; i <= n; i++)
//citesc un struct pentru x si y
f >> p[i].x >> p[i].y;
for( i = 1; i <= n; i++)
for( j = i + 1; j <= n; j++) {
// v[++k] = (double) ((p[j].y - p[i].y) / (p[j].x - p[i].x));
//calculez panta
v[++k]=(double)(p[j].x - p[i].x) / (p[j].y-p[i].y);
}
//sortez crescator dupa panta
sort( v + 1, v + k + 1);
int rezultat = 0;
for( i = 1; i <= k; i++)
{
int nr = 1;
//cat timp indicele pe care ma aflu e mai mic decat nr de componente din vector si 2 elemente alaturate sunt egale
while( i< k && v[i] == v[i+1])
{
//cresc indicele si maresc contorul care inregistreaza nr de trapeze
i++;
nr++;
}
rezultat = rezultat + (nr * (nr-1)) / 2;
}
g << rezultat;
return 0;
}