Pagini recente » Cod sursa (job #2133806) | Cod sursa (job #924436) | Cod sursa (job #2106291) | Cod sursa (job #1330742) | Cod sursa (job #1579421)
#include <stdio.h>
#include <algorithm>
using namespace std;
struct elem{float x,y;};
elem v[1005];
bool cmp(elem a,elem b){
if(a.x<b.x)
return true;
else
if(a.x>b.x)
return false;
else//a.x==b.y
if(a.y<b.y)
return true;
else//a.y>b.y
return false;
}
bool egal(float a,float b){
if(a-b<=0.00001&&a-b>=0)
return true;
if(b-a<=0.0001&&b-a>=0)
return true;
return false;
}
bool cautbin(float i,float j,int n){
int l1=1,l2=n,mij;
while(l1<=l2){
mij=(l1+l2)/2;
if(egal(v[mij].x,i)==true&&egal(v[mij].y,j)==true)
return true;
if(v[mij].x<i)
l1=mij+1;
if(v[mij].x>i)
l2=mij-1;
if(v[mij].x==i){
if(v[mij].y<j)
l1=mij+1;
else
l2=mij-1;
}
}
return false;
}
int main(){
FILE *fin,*fout;
fin=fopen("patrate3.in","r");
fout=fopen("patrate3.out","w");
int i,j,n,cate=0;
float mijx,mijy,difx,dify,x1,x2,y1,y2;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%f%f",&v[i].x,&v[i].y);
sort(v+1,v+n+1,cmp);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
mijx=(v[i].x+v[j].x)/2;
mijy=(v[i].y+v[j].y)/2;
difx=mijx-v[i].x;
dify=mijy-v[i].y;
if(v[i].y<v[j].y){
x1=mijx+dify;
y1=mijy-difx;
x2=mijx-dify;
y2=mijy+difx;
}
else{
x1=mijx-dify;
y1=mijy-difx;
x2=mijx+dify;
y2=mijy+difx;
}
if(cautbin(x1,y1,n)==true&&cautbin(x2,y2,n)==true)
cate++;
}
fprintf(fout,"%d",cate);
fclose(fin);
fclose(fout);
return 0;
}