2017多校2 1011 Regular polygon
来源:互联网 发布:西安java培训多少钱 编辑:程序博客网 时间:2024/06/06 15:35
Regular polygon
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2924 Accepted Submission(s): 685
Problem Description
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.
Input
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.)
Output
For each case, output a number means how many different regular polygon these points can make.
Sample Input
40 00 11 01 160 00 11 01 12 02 1
Sample Output
12
给出n个整数点的坐标,问能组成多少个不同的正多边形
很显眼因为是整数点,那就只能组成正方形了,思路是枚举2个点,然后把能组成正方形的另外2个点的坐标求出来,询问这两个点是否存在。因为坐标存在负值,所以不能单纯的用数组去记录,可以将整张图向右上角挪300个位置,将负点放到第一象限去,就可以开数组记录了。也可以利用点到原点的距离这一特征来构建哈希表来存点。
很显眼因为是整数点,那就只能组成正方形了,思路是枚举2个点,然后把能组成正方形的另外2个点的坐标求出来,询问这两个点是否存在。因为坐标存在负值,所以不能单纯的用数组去记录,可以将整张图向右上角挪300个位置,将负点放到第一象限去,就可以开数组记录了。也可以利用点到原点的距离这一特征来构建哈希表来存点。
#include<iostream>#include<cmath>#include<cstdio>#include<cstring>using namespace std;struct node{ int x; int y; int next;}edge[5555];int head[55555];long long int ans=0;int co;int x[5555];int y[5555];void insert(int x,int y){ int l=(x*x+y*y)%10007; edge[co].x=x; edge[co].y=y; edge[co].next=head[l]; head[l]=co; co++;}void inti(){ for(int i=0;i<=11111;i++) head[i]=-1; ans=co=0;}bool find(int x,int y){ int l=(x*x+y*y)%10007; int next; next=head[l]; while(next!=-1) { if (x==edge[next].x&&y==edge[next].y) return 1; next=edge[next].next; } return 0; }int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,j; int xx,yy; inti(); for(i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); insert(x[i],y[i]); } for (i=1;i<=n;++i) { for (j=i+1;j<=n;++j) { int x1=x[i]-(y[i]-y[j]); int y1=y[i]+(x[i]-x[j]); int x2=x[j]-(y[i]-y[j]); int y2=y[j]+(x[i]-x[j]); if (find(x1,y1)&&find(x2,y2))++ans; } } for (i=1;i<=n;++i) { for (j=i+1;j<=n;++j) { int x1=x[i]+(y[i]-y[j]); int y1=y[i]-(x[i]-x[j]); int x2=x[j]+(y[i]-y[j]); int y2=y[j]-(x[i]-x[j]); if (find(x1,y1)&&find(x2,y2))++ans; } } ans=ans/4; cout<<ans<<endl; } return 0;}
阅读全文
0 0
- 2017多校2 1011 Regular polygon
- (2017多校2)1011/hdu-6055 Regular polygon(计算几何)
- 2017年多校 1011 Regular polygon
- HDU 2017 多校联赛2 1011 Regular polygon
- HDU-2017 多校训练赛2-1011-Regular polygon
- 多校6055 Regular polygon
- 17多校contest two 1011Regular polygon ( 计算几何
- [结论题+枚举] HDU6055:[2017 多校-第2场] Regular polygon
- HDU 6055 (2017 多校训练赛2 1011)Regular polygon
- HDU 2017 多校联合训练赛2 1011 6055 Regular polygon map&pair
- HDU_【2017 Multi-University Training Contest 2】——1011 Regular polygon
- 2017多校训练Contest2: 1011 Regular polygon hdu6055
- HDU 6055 Regular polygon(几何数学)(多校2)
- Hdu6055 Regular polygon(2017多校第2场)
- Regular polygon(2017多校联赛2。 计算几何)
- Regular polygon
- Regular polygon
- Regular polygon
- (转)隐藏在生活里的量化投资密码
- java学习笔记--springboot集成UrlRewrite实现URL伪静态化[jar包和war包]
- csu A(1970): LXX数
- keepalived + LVS
- HDU 1242 Rescue --BFS+重载优先队列
- 2017多校2 1011 Regular polygon
- IMO 2017 T4解答
- 啥玩意儿啊#1
- 脑图神器 -- freemind
- 重定向
- HDU
- 2017多校2 1003Maximum Sequence
- HDU 3416 Marriage Match IV(最短路,网络流)
- Spring MVC 基础及入门