Pagini recente » Cod sursa (job #1041159) | Cod sursa (job #1044199) | Cod sursa (job #1845921) | Cod sursa (job #1943126) | Cod sursa (job #2847834)
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <cmath>
#define MAXN 10000
struct Point{
int x;
int y;
};
Point P[MAXN+1];
bool cmp(Point a,Point b){
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
inline char cauta(int x,int y,int n){
int pas,rez=0;
// printf("%.15lf %.15lf\n" ,y,26.51);
for(pas=1<<12;pas;pas>>=1)
if(rez+pas<=n&&(P[rez+pas].x<x||(P[rez+pas].x==x&&P[rez+pas].y<=y)))
rez+=pas;
// if(x==9.1&&y==26.51)
// printf("%d " ,rez);
return (P[rez].x==x&&P[rez].y==y);
}
int main(){
FILE*fi,*fout;
int i,j,n,ans,x3,y3,x4,y4,x,y,sign;
char a;
fi=fopen("patrate3.in" ,"r");
fout=fopen("patrate3.out" ,"w");
fscanf(fi,"%d " ,&n);
for(i=1;i<=n;i++){
a=fgetc(fi);
sign=1;
if(a=='-'){
sign=-1;
a=fgetc(fi);
}
x=0;
while(isdigit(a)==1){
x=x*10+a-'0';
a=fgetc(fi);
}
a=fgetc(fi);
while(isdigit(a)==1){
x=x*10+a-'0';
a=fgetc(fi);
}
x*=sign;
y=0;
a=fgetc(fi);
sign=1;
if(a=='-'){
sign=-1;
a=fgetc(fi);
}
while(isdigit(a)==1){
y=y*10+a-'0';
a=fgetc(fi);
}
a=fgetc(fi);
while(isdigit(a)==1){
y=y*10+a-'0';
a=fgetc(fi);
}
y*=sign;
P[i].x=x;
P[i].y=y;
}
std::sort(P+1,P+n+1,cmp);
ans=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(P[i].x<P[j].x&&P[i].y<=P[j].y){
x3=P[j].x-(P[j].y-P[i].y);
y3=P[j].y+(P[j].x-P[i].x);
if(cauta(x3,y3,n)==1){
y4=P[i].y+(P[j].x-P[i].x);
x4=P[i].x-(P[j].y-P[i].y);
if(cauta(x4,y4,n)==1)
ans++;
}
x3=P[j].x+(P[j].y-P[i].y);
y3=P[j].y-(P[j].x-P[i].x);
if(cauta(x3,y3,n)==1){
x4=P[i].x+(P[j].y-P[i].y);
y4=P[i].y-(P[j].x-P[i].x);
if(cauta(x4,y4,n)==1)
ans++;
}
}
fprintf(fout,"%d" ,ans/2);
fclose(fi);
fclose(fout);
return 0;
}