Pagini recente » Cod sursa (job #1027873) | Cod sursa (job #259034) | Cod sursa (job #3132812) | Cod sursa (job #2444024) | Cod sursa (job #124174)
Cod sursa(job #124174)
#include<stdio.h>
#include<string.h>
FILE *f=fopen("trapez.in","r"),
*g=fopen("trapez.out","w");
long p[1007][2],n,i,j,ox,oy,t[500555],s,tr,x,k;
char a[500555][40],au[40];
long q(long a)
{ if(a>=0) return a;
return -a;
}
long cmmdc(long a,long b)
{ long r;
r=a%b;
while(r!=0){ a=b;
b=r;
r=a%b;
}
return b;
}
int main()
{ fscanf(f,"%ld",&n);
for(i=1;i<=n;++i) fscanf(f,"%ld %ld",&p[i][0],&p[i][1]);
for(i=1;i<=n;++i) for(j=i+1;j<=n;++j){ if(p[i][0]==p[j][0]) oy++;
else if(p[i][1]==p[j][1]) ox++;
else { s=p[i][1]-p[j][1];
tr=p[i][0]-p[j][0];
x=cmmdc(q(s),q(tr));
if(s<0&&t<0) s/=-x,tr/=-x;
else if(s<0||k<0) s=-q(s)/x,tr=q(k)/x;
else s/=x,tr/=x;
sprintf(au,"%ld/%ld",s,tr);
for(x=1;x<=k&&strcmp(a[x],au);++x);
if(x>k) strcpy(a[++k],au),t[k]=1;
else ++t[x];
}
}
n=0;
n+=(ox-1)*ox/2+oy*(oy-1)/2;
for(i=1;i<=k;++i) n+=t[i]*(t[i]-1)/2;
fprintf(g,"%ld\n",n);
fclose(f);
fclose(g);
return 0;
}