Pagini recente » Cod sursa (job #262749) | Cod sursa (job #1233659) | Cod sursa (job #1121192) | Cod sursa (job #1197347) | Cod sursa (job #17088)
Cod sursa(job #17088)
#include<stdio.h>
FILE *f=fopen("trapez.in", "r"), *g=fopen("trapez.out", "w");
int n;
long NR;
struct nod
{
float info;
nod *urm;
};
nod *prim, *ultim;
void numarare()
{
long nr;
nod *p, *q;
p=prim;
NR=0;
while(p)
{
nr=0;
while(p->info==p->urm->info)
{
nr++;
p=p->urm;
}
if(nr!=0)
NR=NR+nr;
else
p=p->urm;
}
}
void insert(float val)
{
nod *p, *q, *r;
p=new nod;
p->urm=NULL;
p->info=val;
q=prim;
while(q && q->info<val)
{
r=q;
q=q->urm;
}
if(q==prim)
if(prim==NULL)
prim=ultim=p;
else
{
p->urm=prim;
prim=p;
}
else
if(r==ultim)
{
ultim->urm=p;
ultim=p;
}
else
{
r->urm=p;
p->urm=q;
}
}
int main()
{
float m;
int i, j;
long x[1001], y[1001], nr=0;
fscanf(f, "%d", &n);
for(i=1; i<=n; i++)
fscanf(f, "%ld%ld", &x[i], &y[i]);
fclose(f);
for(i=1; i<n; i++)
{
for(j=i+1; j<=n; j++)
{
if(x[i]!=x[j] && y[i]!=y[j])
{
m=(float)(y[i]-y[j])/(x[i]-x[j]);
insert(m);
}
else
{
if(x[i]==x[j])
{
nr++;
}
else
{
m=0;
insert(m);
}
}
}
}
nr=nr*(nr-1)/2;
numarare();
NR=NR+nr;
fprintf(g, "%ld", NR);
fclose(g);
return 0;
}