hdu 6055 Regular polygon

编程入门 行业动态 更新时间:2024-10-10 07:28:26

<a href=https://www.elefans.com/category/jswz/34/1769149.html style=hdu 6055 Regular polygon"/>

hdu 6055 Regular polygon

题意:给出n个点的坐标(均为整数),求能够组成的正多边形的个数

题目思路:都是整数点,那么组成的正多边形只能为正方形,每次枚举两个点,判断是否存在另外的两个点能够组成正方形。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<algorithm>
#define MAXSIZE 1005using namespace std;struct node
{int x,y;
}p[MAXSIZE];int vis[MAXSIZE][MAXSIZE];int solve(int p1,int p2)
{int x = p[p1].x - p[p2].x;int y = p[p1].y - p[p2].y;int ans=0;if(p[p1].x-y>=0 && p[p1].y+x>=0 && p[p2].x-y>=0 && p[p2].y+x>=0 && vis[p[p1].x-y][p[p1].y+x] && vis[p[p2].x-y][p[p2].y+x])ans++;if(p[p1].x+y>=0 && p[p1].y-x>=0 && p[p2].x+y>=0 && p[p2].y-x>=0 && vis[p[p1].x+y][p[p1].y-x] && vis[p[p2].x+y][p[p2].y-x])ans++;return ans;
}int main()
{int n,x,y;while(scanf("%d",&n)!=EOF){int ans = 0;memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){scanf("%d%d",&x,&y);vis[x+200][y+200] = 1;p[i].x = x+200;p[i].y = y+200;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){ans += solve(i,j);}}ans /= 4;printf("%d\n",ans);}return 0;
}
View Code

 

转载于:.html

更多推荐

hdu 6055 Regular polygon

本文发布于:2024-02-25 12:42:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699001.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:hdu   polygon   Regular

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!