Pagini recente » Cod sursa (job #2761338) | Cod sursa (job #316120) | Cod sursa (job #850250) | Cod sursa (job #1304357) | Cod sursa (job #63557)
Cod sursa(job #63557)
struct punct { int x, y; };
struct segment { punct p1, p2; };
int sfunc (void * s1, void * s2) {
segment * ss1=(segment *)s1;
segment * ss2=(segment *)s2;
return ( (ss1->x*ss2->y) - (ss1->y*ss2->x) );
};
long Combinanari(long n, long k) {
if (n<k) return 0;
else {r=1;
for (i=k+1; i<=n; i++) r*=i;
for (i=1; i<=n-k; i++) r/=i;
return r;
};
};
int main (void) {
FILE * fi = fopen("trapez.in","rt");
FILE * fo = fopen("trapez.out","wt");
int d;
fscanf(fi,"%d",&n);
for (int i=1; i<=n; i++) {
fscanf("%ld %ld",&p[i].x,&p[i].y);
};
for (int i=1; i<n; i++)
for (int j=i+1; j<=n; j++) {
segs++;
seg[segs].p1=p[i];
seg[segs].p2=p[j];
}
qsort(segs,0,sizeof(segs),sfunc); //!!!
int pz=0; int off=0;
long rasp=0;
while (pz+off<=segs) {
while (sfunc(&seg[pz],&seg[pz+off])==0) {
off++;
};
off--;
rasp+=Combinanari(off+1,2);
};
fprintf(fo,"%ld\n",rasp);
fclose(fi); fclose(fo);
};