Pagini recente » Cod sursa (job #1519932) | Cod sursa (job #1533114) | Cod sursa (job #160656) | Cod sursa (job #1739741) | Cod sursa (job #14431)
Cod sursa(job #14431)
#include<stdio.h>
FILE *f=fopen("trapez.in", "r"), *g=fopen("trapez.out", "w");
int n;
long x[1001], y[1001];
struct nod
{
long x1, y1, x2, y2;
nod *urm;
};
nod *prim, *ultim;
void creare_lista()
{
nod *p;
int i, j;
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
{
p=new nod;
p->x1=x[i];
p->y1=y[i];
p->x2=x[j];
p->y2=y[j];
p->urm=NULL;
if(prim==NULL)
prim=ultim=p;
else
{
ultim->urm=p;
ultim=p;
}
if(p->y1<p->y2)
{
p->y2=p->y2-p->y1;
p->y1=0;
p->x2=p->x2-p->x1;
p->x1=0;
}
else
{
p->y1=p->y1-p->y2;
p->y2=0;
p->x1=p->x1-p->x2;
p->x2=0;
}
}
}
/*void translatare()
{
nod *p;
p=prim;
while(p)
{
if(p->y1<p->y2)
{
p->y2=p->y2-p->y1;
p->y1=0;
p->x2=p->x2-p->x1;
p->x1=0;
}
else
{
p->y1=p->y1-p->y2;
p->y2=0;
p->x1=p->x1-p->x2;
p->x2=0;
}
p=p->urm;
}
} */
void verificare()
{
long NR, nry, nrx;
nod *p, *q;
p=prim;
NR=0;
nrx=nry=0;
/*while(p)
{
if(p->y1==0 && p->x1!=0 || p->y2==0 && p->x2!=0)
nry++;
if(p->x1==0 && p->y1!=0 || p->x2==0 && p->y2!=0)
nrx++;
p=p->urm;
}
if(nry>=2)
NR=nry*(nry-1)/2;
if(nrx>=2)
NR=NR+nrx*(nrx-1)/2; */
p=prim;
while(p)
{
if(p->y1==0 && p->x1!=0 || p->y2==0 && p->x2!=0)
nry++;
if(p->x1==0 && p->y1!=0 || p->x2==0 && p->y2!=0)
nrx++;
q=p->urm;
if(p->x1!=0 && p->y1!=0)
while(q)
{
if(q->x1!=0 && q->y1!=0)
{
if((float)p->x1/q->x1==(float)p->y1/q->y1)
NR++;
}
else
if(q->x2!=0 && q->y2!=0)
{
if((float)p->x1/q->x2==(float)p->y1/q->y2)
NR++;
}
q=q->urm;
}
else
if(p->x2!=0 && p->y2!=0)
while(q)
{
if(q->x1!=0 && q->y1!=0)
{
if((float)p->x2/q->x1==(float)p->y2/q->y1)
NR++;
}
else
if(q->x2!=0 && q->y2!=0)
{
if((float)p->x2/q->x2==(float)p->y2/q->y2)
NR++;
}
q=q->urm;
}
p=p->urm;
}
if(nry>=2)
NR=NR+nry*(nry-1)/2;
if(nrx>=2)
NR=NR+nrx*(nrx-1)/2;
fprintf(g, "%ld", NR);
}
int main()
{
int i;
fscanf(f, "%d", &n);
for(i=1; i<=n; i++)
fscanf(f, "%ld%ld", &x[i], &y[i]);
fclose(f);
creare_lista();
//translatare();
verificare();
fclose(g);
return 0;
}