Pagini recente » Cod sursa (job #46699) | Cod sursa (job #1599704) | Cod sursa (job #1439829) | Cod sursa (job #1619055) | Cod sursa (job #1083519)
#include <cstdio>
#include <cmath>
#include <algorithm>
FILE *f,*g;
using namespace std;
double eps=0.0001;
int n, nr, i, j;
struct punct{
double x,y;
}a,b,v[1001];
bool cmp(punct p,punct q)
{ if(abs(p.x-q.x) < eps) return p.y<q.y;
return p.x<q.x;
}
bool cauta(punct a)
{ int mij,st=1,dr=n;
while(st <= dr)
{ mij = (st+dr)/2;
if(abs(v[mij].x-a.x) < eps && abs(v[mij].y-a.y) < eps)
return true;
if(cmp(v[mij],a))
st=mij+1;
else
dr=mij-1;
}
return false;
}
int main(){
f=fopen("patrate3.in","r");
g=fopen("patrate3.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%lf %lf",&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++)
{ a.x=v[i].x+v[i].y-v[j].y;
a.y=v[i].y+v[j].x-v[i].x;
b.x=v[j].x+v[i].y-v[j].y;
b.y=v[j].y+v[j].x-v[i].x;
if(cauta(a) && cauta(b)) nr++;
}
fprintf(g,"%d",nr/2);
fclose(f);
fclose(g);
return 0;
}