雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

统计正方形个数——pku2002

Posted on 2011-08-16 20:43  huhuuu  阅读(340)  评论(0编辑  收藏  举报

统计正方形个数 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);
}
}