本文主要是介绍HDU 5533 Dancing Stars on Me (2015ACM/ICPC亚洲区长春 计算几何),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目链接】:click here~~
【题目描述】:
Dancing Stars on Me
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 141 Accepted Submission(s): 96
Formally, a regular polygon is a convex polygon whose angles are all equal and all its sides have the same length. The area of a regular polygon must be nonzero. We say the stars can form a regular polygon if they are exactly the vertices of some regular polygon. To simplify the problem, we project the sky to a two-dimensional plane here, and you just need to check whether the stars can form a regular polygon in this plane.
1≤T≤300
3≤n≤100
−10000≤x
All coordinates are distinct.
3 3 0 0 1 1 1 0 4 0 0 0 1 1 0 1 1 5 0 0 0 1 0 2 2 2 2 0
NO YES NO
【题意】:给出n个点的坐标,问能否组成正多边形。
【思路】判断边长是否相等,对角线相等。。
代码:
/*
* Problem:HDU 5533
* Running time: 15MS
* Complier: G++
* Author: javaherongwei
* Create Time: 21:20 2015/11/02 星期一
*/
#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=233;
int dir4[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
int mat[maxn][maxn];
typedef pair<int,int>pii;
pii p1[maxn],p2[maxn];
int dis(pii a,pii b)
{int x=a.first-b.first;int y=a.second-b.second;return x*x+y*y;
}
void solve()
{int ok=0;int ck[]= {0,1,2,3};do{for(int i=0; i<4; ++i){p2[i]=p1[ck[i]];}bool okk=1;for(int i=1; i<4; ++i){if(dis(p2[i],p2[(i+1)%4])!=dis(p2[0],p2[1])){okk=0;break;}}for(int i=0; i<2; ++i){if(dis(p2[i],p2[(i+2)])!=2*dis(p2[0],p2[1])){okk=0;break;}}if(!okk) continue;if(okk){ok=1;break;}}while(next_permutation(ck,ck+4));if(ok) puts("YES");else puts("NO");
}
int main()
{//freopen("1.txt","r",stdin);int t ;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=0; i<n; ++i){scanf("%d%d",&p1[i].first,&p1[i].second);}solve();}return 0;
}
这篇关于HDU 5533 Dancing Stars on Me (2015ACM/ICPC亚洲区长春 计算几何)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!