Pagini recente » Cod sursa (job #1959983) | Cod sursa (job #531364) | Cod sursa (job #870838) | Cod sursa (job #900935) | Cod sursa (job #2791284)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n,k=1,cont;
int nr;
struct point {int x,y;} p[1010];
long long nrpz = 0;
struct frac
{
int num, denom;
frac(){}
frac(int num_l, int denom_l)
{
num = num_l;
denom = denom_l;
}
bool operator==(frac b)
{
return ((num *b.denom) == (b.num * denom));
}
};
frac m[500510];
bool fcomp(frac a, frac b)
{
return ((a.num * b.denom) <(b.num * a.denom));
}
int main()
{
ifstream f("trapez.in");
ofstream g("trapez.out");
f>>n;
for(int i=1;i<=n;i++) f>>p[i].x>>p[i].y;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
if(p[i].y - p[j].y == 0)
nrpz++;
else
{
nr++;
m[nr]=frac((p[i].x-p[j].x),(p[i].y-p[j].y));
}
}
long long rez = (nrpz*(nrpz-1))/2;
sort(m+1,m+nr+1, fcomp);
for(int i=1;i<nr;)
{
int j;
for(j=i+1;m[i] == m[j]; ++j);
long long nrl = j-i;
rez += (nrl*(nrl-1)/2);
i=j;
}
g<<rez<<"\n";
}