Pagini recente » Cod sursa (job #1999167) | Cod sursa (job #1143429) | Cod sursa (job #2692369) | Cod sursa (job #1526827) | Cod sursa (job #2286280)
#include<cstdio>
#include<algorithm>
#define MAX 1000
using namespace std;
struct mazi{
int numi,numa;
bool operator < (mazi a){
if (this-> numa<a.numa) return true;
if (this-> numa==a.numa &&this-> numi<a.numi) return true;
return false;
}
bool operator == (mazi a){
if (this-> numa==a.numa &&this-> numi==a.numi) return true;
return false;
}
};
int cmmdc(int a,int b){
int r;
while(a!=0){
r=b%a;
b=a;
a=r;
}
return b;
}
bool meow(mazi a,mazi b){
if (a<b) return true;
return false;
}
mazi v[MAX*MAX+1];
int x[MAX+1];
int y[MAX+1];
int m;
void adauga(int i,int j){
int simp;
m++;
v[m].numa=y[j]-y[i];
v[m].numi=x[j]-x[i];
simp=cmmdc(v[m].numi,v[m].numa);
v[m].numi/=simp;
v[m].numa/=simp;
if (v[m].numa<0){
v[m].numa=-v[m].numa;
v[m].numi=-v[m].numi;
}
}
int main(){
freopen ("trapez.in","r",stdin);
freopen ("trapez.out","w",stdout);
int i,j,n,cnt,rez;
scanf ("%d",&n);
for(i=1;i<=n;i++)
scanf ("%d%d",&x[i],&y[i]);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
adauga(i,j);
n=(n-1)*n/2;
sort(v+1,v+n+1,meow);
rez=0;
cnt=1;
for(i=2;i<=n;i++){
if (v[i]==v[i-1]) cnt++;
else {
rez=rez+(cnt-1)*cnt/2;
cnt=1;
}
}
printf ("%d",rez);
return 0;
}