Pagini recente » Cod sursa (job #1034349) | Cod sursa (job #1350643) | Cod sursa (job #2290064) | Cod sursa (job #1571246) | Cod sursa (job #423091)
Cod sursa(job #423091)
#include<stdio.h>
FILE *f=fopen("patrate3.in","r");
FILE *g=fopen("patrate3.out","w");
struct point{
float x;
float y;
} v[1001];
int n,i,j,nr;
float xp1,xp2,yp1,yp2,dx,dy,mijx,mijy;
int tx,ty;
void schimb(int a, int b){
float t=v[a].x;
v[a].x=v[b].x;
v[b].x=t;
t=v[a].y;
v[a].y=v[b].y;
v[b].y=t;
}
void sort(){
for(int i=1;i<=n;i++)
for(j=1;j<i;j++)
if(v[i].x < v[j].x || (v[i].x==v[j].x && v[i].y < v[j].y ))
schimb(i,j);
}
int cauta(float x,float y){
int p=1;
int u=n;
int mij=0;
while(p<=u){
mij=(p+u)/2;
if((v[mij].x -x < 0.00001 && v[mij].x -x > -0.00001) && (v[mij].y -y < 0.00001 && v[mij].y -y> -0.00001))
return 1;
else //am gasit valoarea
if(v[mij].x<x) //x mai mare
p=mij+1;
else if(v[mij].x > x) //x mai mic
u=mij-1;
else if(v[mij].y < y) // x egal si y mai mare
p=mij+1;
else if(v[mij].y > y) // x egal si y mai mic
u=mij-1;
}
return 0;
}
int main(){
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%f%f",&v[i].x,&v[i].y);
sort();
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
{ mijx = (v[i].x + v[j].x) / 2;
mijy = (v[i].y + v[j].y) / 2;
dx=mijx - v[j].x;
dy=mijy - v[j].y;
if(dx<0)
dx=-dx;
if(dy<0)
dy=-dy;
if( (v[i].y - v[j].y > 0.00001) || (v[i].y - v[j].y < -0.00001) ){
xp1 = mijx + dy;
yp1 = mijy - dx;
xp2 = mijx - dy;
yp2 = mijy + dx;
}
else {
xp1 = mijx - dy;
yp1 = mijy - dx;
xp2 = mijx + dy;
yp2 = mijy + dx;
}
if(cauta(xp1,yp1)&&cauta(xp2,yp2))
nr++;
}
fprintf(g,"%d",nr);
return 0;
}