HDU5533 Dancing Stars on Me(极角排序+判断正n边形)
2015-11-23 15:46
330 查看
题目链接
题意:给你n个坐标平面的整数点。然后问你能不能组合成正n边形
解法:因为点的坐标是正数,所以只能组成正的4边形。所以直接判断正四边形即可,先极角排序,然后计算任意2点之间的距离,如果结果只有2个值,就是符合的,(本题点可能会出现重合)
题意:给你n个坐标平面的整数点。然后问你能不能组合成正n边形
解法:因为点的坐标是正数,所以只能组成正的4边形。所以直接判断正四边形即可,先极角排序,然后计算任意2点之间的距离,如果结果只有2个值,就是符合的,(本题点可能会出现重合)
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> //#include<bits/stdc++.h> using namespace std; #define LL long long #define pb push_back #define X first #define Y second #define cl(a,b) memset(a,b,sizeof(a)) typedef pair<long long ,long long > P; const int maxn=1005; const LL inf=1LL<<45; const LL mod=1e9+7; struct node{ int x,y; bool operator<(const node&t)const { return atan2(y,x)<atan2(t.y,t.x); } }p[maxn]; LL f(int x) {return x*x;} LL dis(node a,node b){ return f(a.x-b.x)+f(a.y-b.y); } bool check(){ LL x[12]; int num=0; for(int i=0;i<4;i++){ for(int j=0;j<4;j++)if(i!=j){ x[num++]=dis(p[i],p[j]); } } sort(x,x+num); // printf("num = %d\n",num); // for(int i=0;i<num;i++){ // printf("x[i] = %d\n",x[i]); // } int ok=0; for(int i=1;i<num;i++)if(x[i]!=x[i-1])ok++; return ok==1; } int main(){ int T;scanf("%d",&T); while(T--){ int n;scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d",&p[i].x,&p[i].y); } if(n!=4){ puts("NO");continue; } sort(p,p+4); if(check()){ puts("YES"); } else { puts("NO"); } } return 0; }
相关文章推荐
- iOS Crash闪退日志获取和上传至服务器(NSSetUncaughtExceptionHandler)
- 在树莓派2为django配置uwsgi和nginx服务
- Oracle
- JavaScript事件流
- svn propset svn:ignore
- 【Ruby】学习资料
- svn propset svn:ignore
- memcache的原理和命中率的总结
- linux安装LoadGenerator、controller添加linux LoadGenerator
- Volley读取文档和图片
- 如何使用require.js?
- 与或运算
- 使用Java实现类似Comet风格的web app
- jdk 命令行工具
- Github上删除fork的仓库
- java的标准输入输出(一)
- Spring配置为内部类 和 引用静态域变量 配置方式
- Xcode7修复插件失败方法
- wpa_supplican介绍及使用
- UML关系类图