HDU 6055 Regular polygon(计算几何+思维)——2017 Multi-University Training Contest - Team 2
2017-07-28 11:26
579 查看
传送门
Total Submission(s): 1187 Accepted Submission(s): 461
[align=left]Problem Description[/align] On a two-dimensional plane, give you n integer points. Your task is to figure out how many different regular polygon these points can make.
[align=left]Input[/align] The input file consists of several test cases. Each case the first line is a numbers N (N <= 500). The next N lines ,each line contain two number Xi and Yi(-100 <= xi,yi <= 100), means the points’ position.(the data assures no two points share the same position.)
[align=left]Output[/align] For each case, output a number means how many different regular polygon these points can make.
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
题目大意:
给了 n(n≤500) 个整数点,求能构成多少个正多边形
解题思路:
首先因为是整数点,所以只能构成正四边形也就是正方形,首先想过暴力,复杂度 O(n4), 爆炸。 然后想的是 如何优化。因为是正方形,我们可以直接枚举两个点,然后判断剩余的两个点是否存在就可以了。
首先我们按照 x 坐标从小到大进行排序,然后计算另外两个点的坐标,然后判断,需要注意的是我们多算了一遍,要除以2
有一个坑点:就是将负数点转化为正数的时候,经过计算:要加上>300 的数。
代码:
Regular polygon
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1187 Accepted Submission(s): 461
[align=left]Problem Description[/align] On a two-dimensional plane, give you n integer points. Your task is to figure out how many different regular polygon these points can make.
[align=left]Input[/align] The input file consists of several test cases. Each case the first line is a numbers N (N <= 500). The next N lines ,each line contain two number Xi and Yi(-100 <= xi,yi <= 100), means the points’ position.(the data assures no two points share the same position.)
[align=left]Output[/align] For each case, output a number means how many different regular polygon these points can make.
[align=left]Sample Input[/align]
4 0 0 0 1 1 0 1 1 6 0 0 0 1 1 0 1 1 2 0 2 1
[align=left]Sample Output[/align]
1 2
题目大意:
给了 n(n≤500) 个整数点,求能构成多少个正多边形
解题思路:
首先因为是整数点,所以只能构成正四边形也就是正方形,首先想过暴力,复杂度 O(n4), 爆炸。 然后想的是 如何优化。因为是正方形,我们可以直接枚举两个点,然后判断剩余的两个点是否存在就可以了。
首先我们按照 x 坐标从小到大进行排序,然后计算另外两个点的坐标,然后判断,需要注意的是我们多算了一遍,要除以2
有一个坑点:就是将负数点转化为正数的时候,经过计算:要加上>300 的数。
代码:
#include <bits/stdc++.h> using namespace std; const int MAXN = 605; int mp[MAXN][MAXN]; struct Point{ int x, y; }p[MAXN]; int cmp(Point A, Point B){ if(A.x == B.x) return A.y < B.y; return A.x < B.x; } int main() { ///freopen("in.txt","r", stdin); int n; while(~scanf("%d", &n)){ memset(mp, 0, sizeof(mp)); for(int i=0; i<n; i++) { int x, y; scanf("%d%d", &x, &y); p[i].x = (x + 300); p[i].y = (y + 300); mp[p[i].x][p[i].y] = 1; } sort(p, p+n, cmp); int sum = 0; for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ int dx = p[i].x - p[j].x; int dy = p[j].y - p[i].y; if(mp[p[i].x+dy][p[i].y+dx] && mp[p[j].x+dy][p[j].y+dx]) sum++; } } printf("%d\n",sum/2); } return 0; }
相关文章推荐
- HDU 6127 Hard challenge(思维+计算几何)——2017 Multi-University Training Contest - Team 7
- hdu 6055 简单计算几何,查找点的四种办法 2017 Multi-University Training Contest - Team 2
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6045 简单的思维题 2017 Multi-University Training Contest - Team 2
- HDU-6058 Kanade's sum - 2017 Multi-University Training Contest - Team 3(思维+模拟链表)