首页 > 代码库 > 【HDOJ】2428 Stars

【HDOJ】2428 Stars

先排序后二分。

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6  7 #define MAXN 1005 8  9 typedef struct {10     int x, y;11 } node_st;12 13 node_st nodes[MAXN];14 int n;15 16 bool comp(node_st a, node_st b) {17     if (a.x == b.x)18         return a.y < b.y;19     else20         return a.x < b.x;21 }22 23 bool find(int x, int y) {24     int l=0, r=n-1, mid;25 26     while (l <= r) {27         mid = (l+r)>>1;28         if (nodes[mid].x==x && nodes[mid].y==y)29             return true;30         if (nodes[mid].x > x)31             r = mid - 1;32         else if (nodes[mid].x < x)33             l = mid + 1;34         else if (nodes[mid].y > y)35             r = mid - 1;36         else37             l = mid + 1;38     }39     return false;40 }41 42 int main() {43     int t, ans;44     int i, j;45 46     scanf("%d", &t);47     while (t--) {48         scanf("%d", &n);49         for (i=0; i<n; ++i)50             scanf("%d%d", &nodes[i].x, &nodes[i].y);51         sort(nodes, nodes+n, comp);52         for (ans=0,i=0; i<n; ++i) {53             for (j=i+1; j<n; ++j) {54                 if ((nodes[i].x-nodes[j].x)==(nodes[i].y-nodes[j].y) && find(nodes[i].x, nodes[j].y) && find(nodes[j].x, nodes[i].y))55                     ++ans;56             }57         }58         printf("%d\n", ans);59     }60 61     return 0;62 }