Pagini recente » Cod sursa (job #2523560) | Cod sursa (job #2724102) | Cod sursa (job #2658403) | Cod sursa (job #2637346) | Cod sursa (job #2091894)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 1010;
int n,nr;
long long suma;
pair<int,int> cord[NMAX];
int nr_pante;
struct coord{
long long numarator,numitor;
}vec[4000000];
void read()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%d",&n);
int a,b;
for(int i = 0 ; i < n ; i++)
{
scanf("%d %d",&a,&b);
cord[i].first = a;
cord[i].second = b;
}
}
bool cmp(coord a , coord b)
{
if(b.numitor*a.numarator < b.numarator*a.numitor)
return 1;
return 0;
}
void pante()
{
for(int i = 0 ; i < n - 1; i++)
{
for(int j = i + 1 ; j < n ; j++)
{
if(cord[i].second - cord[j].second== 0)
{
nr++;
continue;
}
if(cord[i].first < cord[i].first)
{
vec[nr_pante].numarator = cord[j].second - cord[i].second;
vec[nr_pante].numitor = cord[j].second - cord[j].second;
nr_pante++;
}
if(cord[i].first > cord[j].first)
{
vec[nr_pante].numarator = cord[i].second - cord[j].second;
vec[nr_pante].numitor = cord[i].first - cord[j].first;
nr_pante++;
}
}
}
sort(vec,vec+nr_pante,cmp);
}
void result()
{
long long aux = 1;
for(int i = 1 ; i < nr_pante;i++)
{
if((vec[i].numitor*vec[i-1].numarator)==(vec[i].numarator*vec[i-1].numitor))
{
aux++;
}
else
{
suma += aux*(aux-1)/2 ;
aux = 1;
}
}
suma+=aux*(aux-1)/2;
suma+=nr*(nr-1)/2;
}
int main()
{
read();
pante();
result();
printf("%lld",suma);
return 0;
}