Pagini recente » Istoria paginii runda/micii_informaticieni | Cod sursa (job #2316340) | Cod sursa (job #1882997) | Cod sursa (job #993927) | Cod sursa (job #2332582)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#define db double
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
int n,i,j,rez;
struct per
{ double x, y;
bool operator<(const per &alt)const
{ return x!=alt.x ? x<alt.x : y<alt.y; }
} v[1006],aux;
const double EPS = 1e-12;
inline bool eq(double a,double b)
{ return abs(a-b)<EPS; }
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(v[m]<p) l=m+1;
else r=m-1;
}
return 0;
}
void do_diag(per z,per u)
{
per m={(z.x+u.x)/2,(z.y+u.y)/2},d={0,0},t={0,0};
double dx=abs(z.x-m.x),dy=abs(z.y-m.y);
if(z.y<u.y)
{
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>>v[i].x>>v[i].y;
v[i].x=round(v[i].x*10000);
v[i].y=round(v[i].y*10000);
}
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";
}