您的位置:首页 > 其它

POJ 2002

2013-07-04 15:29 253 查看
纯二分 水

#include <cstdio>
#include <cstring>
#include <algorithm>

using std::memset;
using std::sort;

const int MAX = 2005;
int n;

struct position
{
int x,y;
}star[MAX];;

bool cmp(position a,position b)
{
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}

int cmp2(position a, position b)
{
if(a.x == b.x)
{
if(a.y == b.y)
return 0;
else if(a.y < b.y)
return -1;
else
return 1;
}
else if(a.x < b.x)
return -1;
return 1;
}

bool binsearch(int l, int r, position x)
{
while(l+1 < r)
{
int m = (l+r)>>1;
if(cmp2(x, star[m]) == 0)
return true;
else if(cmp2(x, star[m]) == -1)
r = m;
else
l = m;
}
return false;
}

int main()
{
while(scanf("%d", &n) && n)
{
for(int i = 0 ; i < n; i++)
{
scanf("%d%d", &star[i].x, &star[i].y);
}

sort(star, star+n, cmp);

//for(int i = 0 ; i < n; i++)
//{
//	printf("%d%d\n", star[i].x, star[i].y);
//}
int count = 0;

for(int i = 0 ; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
int dx = star[j].x - star[i].x;
int dy = star[j].y - star[i].y;

position temp;

temp.x = star[i].x + dy;
temp.y = star[i].y - dx;

if(binsearch(-1, n, temp) == false) continue;

temp.x = star[j].x + dy;
temp.y = star[j].y - dx;

if(binsearch(-1, n, temp) == false) continue;

count++;
}
}

printf("%d\n", count/2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: