Pagini recente » Cod sursa (job #2852955) | Cod sursa (job #239300) | Cod sursa (job #1900736) | Cod sursa (job #2549029) | Cod sursa (job #572771)
Cod sursa(job #572771)
#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
struct pante{
long long x,y;
}v[1000001];
long long i,j,n,nrt,a[1001],b[1001],nr,px,py;
int cmp(const void*a,const void *b){
if((*(pante*)a).x<0&&(*(pante*)b).x>0){
return -1;
}
if((*(pante*)a).x>0&&(*(pante*)b).x<0){return 1;}
return (*(pante*)a).x*((*(pante*)b).y)-(*(pante*)b).x*((*(pante*)a).y);
//}
//return (*(pante*)b).x-(*(pante*)a).x;
}
int main(){
fin=fopen("trapez.in","r");
fout=fopen("trapez.out","w");
fscanf(fin,"%lld",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%lld %lld",&a[i],&b[i]);
}
int ok=1;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
ok=1;
if(b[i]==b[j]){px++;ok=0;}
if(a[i]==a[j]){py++;ok=0;}
if(ok==1) {
nr++;
v[nr].x=b[j]-b[i];
v[nr].y=a[j]-a[i];
if(v[nr].y<0 && v[nr].x>0){v[nr].x=-v[nr].x;v[nr].y=-v[nr].y;}
if(v[nr].x<0 && v[nr].y<0){v[nr].x=-v[nr].x;v[nr].y=-v[nr].y;}
}
}
}
nrt=0;
long long nrt1;
qsort(v+1,nr,sizeof(pante),cmp);
for(i=1;i<=nr;i++){
j=i+1; nrt1=1;
while(v[i].x*v[j].y==v[i].y*v[j].x&&j<=nr){nrt1++;j++;}
nrt=nrt+nrt1*(nrt1-1)/2;
i=j-1;
}
nrt=nrt+px*(px-1)/2;
nrt=nrt+py*(py-1)/2;
fprintf(fout,"%lld",nrt);
return 0;
}