统计正方形个数 set做
结构体要加:
friend bool operator<(data a,data b)
{
if(a.x==b.x)
return a.y>b.y;
else
return a.x>b.x;
}
枚举正方形的两个点 知道下面两个点
寻找set中这两个点是否存在
View Code
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<set>
using namespace std;
struct data
{
int x,y;
friend bool operator<(data a,data b)
{
if(a.x==b.x)
return a.y>b.y;
else
return a.x>b.x;
}
};
data all[1009];
int main()
{
int n;
while(scanf("%d",&n),n!=0)
{
set<data>ss;
int i;
int add=0;
for(i=1;i<=n;i++)
{
data f;
scanf("%d%d",&f.x,&f.y);
all[i].x=f.x;
all[i].y=f.y;
ss.insert(f);
}
int j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)continue;
if((all[i].x<=all[j].x)&&(all[i].y<all[j].y))//顶点i,j在水平方向或是i在j的左下方
{
int a=all[j].x-all[i].x;//只是一条边
int b=all[j].y-all[i].y;
int x=b,y=-a;
data ll,rr;
ll.x=all[i].x+x;
ll.y=all[i].y+y;
rr.x=all[j].x+x;
rr.y=all[j].y+y;
if(ss.find(ll)!=ss.end()&&ss.find(rr)!=ss.end())
{
add++;
}
}
}
}
printf("%d\n",add);
}
}