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); } }
相关文章推荐
- poj 2002 Squares
- poj 2002 Squares
- 【POJ】2002 - Squares(暴力枚举 & 双关键字二分查找)
- POJ 2002 Squares (哈希表)
- BIT1033 POJ 2002 Squares
- POJ 2002
- (2017多校训练第二场)HDU - 6055 & POJ - 2002 Regular polygon 哈希
- POJ 2002 Squares 哈希
- POJ 1240 Pre-Post-erous! && East Central North America 2002 (由前序后序遍历序列推出M叉树的种类)
- POJ2002_Squares (哈希表)
- poj2002 Squares
- [poj2002]Squares_hash
- poj 2002 Squares
- poj2002 哈希链地址法
- POJ2002:Squares
- POJ 2002 Squares(hash)
- POJ 2002 二分法
- POJ - 2002 Squares解题报告
- 【ZJOI2002】poj1061 青蛙的约会
- POJ-2208 Pyramids (Northeastern Europe 2002)