Pagini recente » Cod sursa (job #738248) | Cod sursa (job #694384) | Cod sursa (job #2213909) | Cod sursa (job #972587) | Cod sursa (job #2332480)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#define ll long long
#define db double
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
int n,i,j,nr;
ll rez;
db db1,db2;
struct per
{ db x, y;
bool operator<(const per &alt)const
{ return x!=alt.x ? x<alt.x : y<alt.y; }
} v[1006],aux;
inline bool eq(db a,db b)
{ return abs(a-b)<0.00001; }
int check(per p)
{
int l=1,r=n,m=0;
while(l<=r)
{
m=(l+r)/2;
if(eq(p.x,v[m].x) && eq(p.y,v[m].y)) return 1;
if(p<v[m]) r=m-1;
else l=m+1;
}
return 0;
}
void do_diag(per z,per u)
{
if(z.y>u.y)
aux=z, z=u, u=aux;
per m={(z.x+u.x)/2,(z.y+u.y)/2},d,t;
db dx=abs(z.x-m.x),dy=abs(z.y-m.y);
if(z.x<=m.x)
{
d.x=m.x-dy, d.y=m.y+dx;
t.x=m.x+dy, t.y=m.y-dx;
}
else
{
d.x=m.x-dy, d.y=m.y-dx;
t.x=m.x+dy, t.y=m.y+dx;
}
if(check(d) && check(t)) rez++;
}
int main() {
fin>>n;
for(i=1;i<=n;i++)
{
fin>>db1>>db2;
v[i].x=db1, v[i].y=db2;
}
sort(v+1,v+n+1);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
do_diag(v[i],v[j]);
fout<<rez/2<<"\n";
}