Pagini recente » Cod sursa (job #277343) | Cod sursa (job #1626048) | Cod sursa (job #2626280) | Cod sursa (job #634227) | Cod sursa (job #2917707)
//Ilie Dumitru
#include<cstdio>
#include<algorithm>
const int NMAX=1000005;
int N, x[1000], y[1000];
int cmmdc(int a, int b)
{
int aux;
while(b)
{
aux=a%b;
a=b;
b=aux;
}
return a;
}
struct slope
{
int x, y;
};
int n;
slope v[NMAX];
int main()
{
FILE* f=fopen("trapez.in", "r"), *g=fopen("trapez.out", "w");
int i, j, a, b, d, bit;
long long int ans=0;
fscanf(f, "%d", &N);
for(i=0;i<N;++i)
{
fscanf(f, "%d%d", x+i, y+i);
for(j=0;j<i;++j)
{
bit=0;
a=x[i]-x[j];
if(a<0)
a=-a, ++bit;
b=y[i]-y[j];
if(b<0)
b=-b, ++bit;
d=cmmdc(a, b);
a/=d;
b/=d;
if(bit&1)
b=-b;
v[n].x=a;
v[n++].y=b;
}
}
fclose(f);
std::sort(v, v+n, [](slope a, slope b) {return a.x<b.x || (a.x==b.x && a.y<b.y);});
for(i=0;i<n;i=j)
{
for(j=i+1;j<n && v[i].x==v[j].x && v[i].y==v[j].y;++j);
a=j-i;
ans+=(a*(long long int)(a-1))>>1;
}
fprintf(g, "%lld\n", ans);
fclose(g);
return 0;
}