Pagini recente » Cod sursa (job #2009419) | Cod sursa (job #1927294) | Cod sursa (job #1020216) | Cod sursa (job #2498644) | Cod sursa (job #2758350)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f ("trapez.in");
ofstream g ("trapez.out");
struct coordonate
{
long long x,y;
} v[1009];
long long n, i, j, k, solutie, nr;
double panta[1000009];
int main()
{
f>>n;
for(int i=0; i<n; i++)
f>>v[i].x>>v[i].y;
//vom folosi panta fiecarei linii pentru a verifica daca doua linii sunt paralele
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
{
if(v[i].x-v[j].x)
{
panta[k++] = (double)(v[i].y-v[j].y)/(v[i].x-v[j].x);
}
}
//sortam vectorul pentru a-l parcurge si vedea cate pante consecutive sunt egale
sort(panta,panta+k);
solutie = 1;
panta[k+1] = -1;
for(int i=0; i<k; i++)
{
if(panta[i] != panta[i+1])
{//daca avem mai mult de 1 trapez care se poate face cu 2 linii il adaugam
nr += ((solutie - 1) *solutie)/2;
//reinitializam nr de trapeze posibile la 0 pentru a continua
solutie = 1;
}
//daca doua pante sunt egale atunci crestem numarul de trapeze posibile
else
solutie ++;
}
g<<nr;
f.close();
g.close();
return 0;
}