HDU-6055 Regular polygon
2017-08-09 10:48
274 查看
2017 Multi-University Training Contest - Team 2 - 1011
然后枚举2个点,看以这两个点为正方形一条边确定另外两个点(上下可以确定两个正方形),然后判断另外两个点是否存在,因为一个正方形可以由它的4条边分别来确定,所以最后的答案要除4。具体看代码实现吧。
后来发现这样少考虑了很多边不平行坐标轴的情况。然后开始尝试四层循环枚举每个点看是不是正方形。很可惜tle。
当时队友百度了一发交上A了,方法是枚举2个点,然后看由这两个点组成的正方形的另外两个点是否存在。当时还不理解,然后这两天又重新看了一眼代码才明白其中的奥妙。
HDU-6055 Regular polygon
题意:
在一个二维坐标平面中,给你 n 个点,求 n 个点可以组成的正多边形个数。思路:
首先这样的正多边形只有正方形。然后枚举2个点,看以这两个点为正方形一条边确定另外两个点(上下可以确定两个正方形),然后判断另外两个点是否存在,因为一个正方形可以由它的4条边分别来确定,所以最后的答案要除4。具体看代码实现吧。
代码:
#include <cstdio> #include <iostream> #include <cmath> #include <cstring> using namespace std; struct S { int x, y; }; int main() { int n; int x, y, a, b, c, d; int ans; S p[500 + 10]; bool vis[400 + 10][400 + 10]; /// 开这么大防止越界 while(~scanf("%d", &n)) { memset(p, 0, sizeof(p)); memset(vis, 0, sizeof(vis)); ans = 0; for(int i = 0; i < n; ++i) { scanf("%d%d", &x, &y); x += 100; y += 100; p[i].x = x; p[i].y = y; vis[x][y] = 1; } for(int i = 0; i < n; ++i) { for(int j = i + 1; j < n; ++j) { x = p[i].x - p[j].x; y = p[i].y - p[j].y; /// 只需要判断 >=0 因为数组足够大后面不会越界 /// 这里的坐标确定用到了三角形的全等,自己画一下就可以理解 if((a = p[i].x + y) >= 0 && (b = p[i].y - x) >= 0 && (c = p[j].x + y) >= 0 && (d = p[j].y - x) >= 0 && vis[a][b]&& vis[c][d]) { ++ans; } if((a = p[i].x - y) >= 0 && (b = p[i].y + x) >= 0 && (c = p[j].x - y) >= 0 && (d = p[j].y + x) >= 0 && vis[a][b] && vis[c][d]) { ++ans; } } } cout << (ans / 4) << endl; } return 0; }
后记:
最开始只想到了边和坐标轴平行的正方形,然后从坐标的左下角开始枚举平面的每一个点然后边长从1到200看能否组成正方形。后来发现这样少考虑了很多边不平行坐标轴的情况。然后开始尝试四层循环枚举每个点看是不是正方形。很可惜tle。
当时队友百度了一发交上A了,方法是枚举2个点,然后看由这两个点组成的正方形的另外两个点是否存在。当时还不理解,然后这两天又重新看了一眼代码才明白其中的奥妙。
相关文章推荐
- HDU 6055 Regular polygon (暴力)
- Regular polygon - HDU 6055 - 2017 多校
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- HDU 6055 Regular polygon(计算几何+思维)——2017 Multi-University Training Contest - Team 2
- (2017多校训练第二场)HDU - 6055 & POJ - 2002 Regular polygon 哈希
- HDU 6055 Regular polygon
- 2017 多校训练第二场 HDU 6055 Regular polygon
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon
- 【2017多校训练2+计算几何+板】HDU 6055 Regular polygon
- hdu 6055 Regular polygon
- HDU 6055 Regular polygon(几何)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- HDU 6055 Regular polygon(hash)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- HDU 6055 Regular polygon 暴力枚举
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- HDU 6055 Regular polygon (计算几何 + 国家队论文结论)