版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/82357206
数学题,注意二分之前要先排序
、
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
const int maxn=555;
struct Point
{
double x,y;
Point(){}
Point(double _x,double _y)
{
x=_x;
y=_y;
}
double operator ^(const Point &b)const
{
return x*b.y-y*b.x;
}
double operator *(const Point &b)const
{
return x*b.x+y*b.y;
}
Point operator -(const Point &b)const
{
return Point(x-b.x,y-b.y);
}
bool operator <(const Point &b)const
{
if(x!=b.x)
return x<b.x;
else
return y<b.y;
}
};
Point p[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%lf %lf",&p[i].x,&p[i].y);
}
int ans=0;
sort(p,p+n);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
Point p3,p4;
p3.x=p[i].x+(p[i].y-p[j].y);
p3.y=p[i].y+(p[j].x-p[i].x);
p4.x=p[j].x+(p[i].y-p[j].y);
p4.y=p[j].y+(p[j].x-p[i].x);
if(binary_search(p,p+n,p3)==1&&binary_search(p,p+n,p4)==1)
ans++;
p3.x=p[i].x-(p[i].y-p[j].y);
p3.y=p[i].y-(p[j].x-p[i].x);
p4.x=p[j].x-(p[i].y-p[j].y);
p4.y=p[j].y-(p[j].x-p[i].x);
if(binary_search(p,p+n,p3)==1&&binary_search(p,p+n,p4)==1)
ans++;
}
}
cout<<ans/4<<endl;
}
return 0;
}