解题报告——POJ 2002
2015-02-17 11:58
232 查看
Squares
Description
A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property.
So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates.
Input
The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
Output
For each test case, print on a line the number of squares one can form from the given stars.
Sample Input
Sample Output
Time Limit: 3500MS | Memory Limit: 65536K | |
Total Submissions: 16908 | Accepted: 6425 |
A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property.
So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates.
Input
The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
Output
For each test case, print on a line the number of squares one can form from the given stars.
Sample Input
4 1 0 0 1 1 1 0 0 9 0 0 1 0 2 0 0 2 1 2 2 2 0 1 1 1 2 1 4 -2 5 3 7 0 0 5 2 0
Sample Output
1 6 1 ------------------------------------------------------------------- 这道题的原意应该是用哈希数组解决,不过我做了将近一天还是没有AC,不是WA就是RE,等技术娴熟了再来做吧~ 这道题可以用二分法来做:将点集进行排序,然后用二分法进行查找。 大致思路:按照先x后y的顺序对点集进行排序,循环选择两个点,然后计算出第三、四个点可能存在的位置,用二分法查找这样的点是否存在,若存在则计数加一。最后根据同一正方形被重复计数的次数,将计数除以相应的次数。 代码如下: ------------------------------------------------------------------
#include <cstdio> #include <algorithm> using namespace std; #define N 1001 struct Node { int x, y; }node ; Node temp; bool cmp(Node X, Node Y) { if(X.x == Y.x) { return X.y < Y.y; } return X.x < Y.x; } int main() { int n, sum = 0; freopen("D:\\test.txt", "r", stdin); while(scanf("%d", &n) != EOF && n) { sum = 0; for(int i = 0; i < n; i++) { scanf("%d%d", &node[i].x, &node[i].y); } sort(node, node + n, cmp); for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { temp.x = node[j].x + node[i].y - node[j].y; temp.y = node[j].y + node[j].x - node[i].x; if(!binary_search(node, node + n, temp, cmp)) { continue; } temp.x = node[i].x + node[i].y - node[j].y; temp.y = node[i].y + node[j].x - node[i].x; if(binary_search(node, node + n, temp, cmp)) { sum++; } } } printf("%d\n", sum / 2); } }
相关文章推荐
- POJ_2002Squares解题报告
- POJ-2002 Squares 解题报告
- POJ-2002 Squares解题报告
- poj2002 Squares 解题报告
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
- poj解题报告——3267
- POJ 1788 解题报告
- poj解题报告——2262
- POJ 1003 Hangover [解题报告] Java
- POJ 3281 网络流最大流 解题报告
- POJ 2533 Longest Ordered Subsequence 解题报告
- POJ 1635 解题报告
- POJ-1861-NETWORK 解题报告
- POJ 1163 The Triangle 解题报告
- POJ 1503 Integer Inquiry 解题报告
- poj 1007DNA Sorting解题报告
- poj 2096 期望DP 解题报告
- 单调队列 - 兼 ACM PKU POJ 3250 及 2823 解题报告 [转]
- poj2381解题报告
- POJ-1995-Raising Modulo Numbers 解题报告