Pagini recente » Cod sursa (job #1902643) | Cod sursa (job #2077036) | Cod sursa (job #1937016) | Cod sursa (job #2957574) | Cod sursa (job #1645891)
#include<cstdio>
#include<algorithm>
#define INFINIT 2000000000
using namespace std;
struct punct{int x,y;};
struct dreapta{int dx,dy;};
punct v[1001];
dreapta d[500501];
bool cmp(dreapta a,dreapta b){
if(a.dx*b.dy>b.dx*a.dy)
return true;
else
return false;
}
void reducere(int &a,int &b){
int ca,cb,r;
ca=a;
cb=b;
while(cb!=0){
r=ca%cb;
ca=cb;
cb=r;
}
a/=ca;
b/=ca;
}
int main(){
int n,i,ind,j,l,nr;
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d%d",&v[i].x,&v[i].y);
ind=1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
d[ind].dx=v[i].x-v[j].x;
d[ind].dy=v[i].y-v[j].y;
if(d[ind].dx==0){
d[ind].dx=1;
d[ind].dy=INFINIT;
}else
reducere(d[ind].dx,d[ind].dy);
ind++;
}
ind--;
sort(d+1,d+ind+1,cmp);
l=1;
nr=0;
for(i=1;i<ind;i++){
if(d[i].dx==d[i+1].dx&&d[i].dy==d[i+1].dy)
l++;
else{
nr+=(l*(l-1))/2;
l=1;
}
}
nr+=(l*(l-1))/2;
printf("%d",nr);
return 0;
}