Cod sursa(job #69284)
#include<fstream.h>
#include<math.h>
long n,a[1001],b[1001];
void citire(){
ifstream fin("trapez.in");
fin>>n;
for (int i=0;i<n;i++)
fin>>a[i]>>b[i];
fin.close();
}
void sortare (){
short ok=0;
while (ok==0){
ok=1;
n--;
for (int i=0;i<n;i++)
if (a[i]>a[i+1]){
long aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
aux=b[i];
b[i]=b[i+1];
b[i+1]=aux;
ok=1;}
else
if (a[i]==b[i])
if (b[i]>b[i+1]){
long aux=b[i];
b[i]=b[i+1];
b[i+1]=aux;
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
ok=1;}
}
}
int caz1 (int h,int u){
long nr=0;
for (int i=h;i<n-1;i++)
for (int j=i+1;j<n;j++){
if (a[i]==a[j]){
nr++;
if (a[h]-a[u]==a[j]-a[i])
nr++;}
if (b[i]==b[h]&&b[j]==b[u])
nr++;
if (b[j]==b[h]&&b[i]==b[u])
nr++;
}
return nr;
}
int caz2(int e,int r){
long nr=0;
for (int i=e;i<n-1;i++)
for (int j=i+1;j<n;j++){
if (b[i]==b[j]){
nr++;
if (b[r]-b[e]==b[j]-b[i])
nr++;
if (a[i]==a[e]&&a[j]==a[r])
nr++;
if (a[j]==a[e]&&a[i]==a[r])
nr++;
}
}
return nr;
}
double latura(int x1,int y1,int x,int y){
double w=0;
w+=(x1-x);
w*=(x1-x);
w+=(y1-y)*(y1-y);
double f=sqrt(w);
return f;
}
int caz3(int e,int r){
int nr=0;
double L,L1,x,y;
L=latura(a[e],b[e],a[r],b[r]);
x=L/(a[e]-a[r]);
y=L/(b[e]-b[r]);
for (int i=e;i<n-1;i++)
for (int j=i+1;j<n;j++){
L1=latura(a[i],b[i],a[j],b[j]);
if (x==L1/(a[j]-a[i]))
if (y==L1/(b[j]-b[i]))
nr++;}
return nr;
}
int numarare(){
long nr=0;
for (int i=0;i<n-3;i++)
for (int j=i+1;j<n-2;j++){
if (a[i]==a[j])
nr+=caz1(j,i);
else
if (b[i]==b[j])
nr+=caz2(j,i);
else
nr+=caz3(j,i);
}
return nr;
}
int main(){
citire();
sortare();
ofstream fout("trapez.out");
fout<<numarare();
fout<<"\n";
fout.close();
return 0;
}