- 【题意】
- T(300)组数据。
- 对于每组数据,给你n([3,100])个点,每个点的坐标都在[-10000,10000]之间。
- 所有坐标都不相同。
- 我们想知道这些点是否可以连接构成正n边形。
- 【类型】
- 结论题
- 【分析】
- 有结论,平面上的正多边形并且每个点都是整点坐标只可能是正四边形。
- 于是我们只在n==4的时候判定。
#include <bits/stdc++.h> using namespace std; #define SZ(X) ((int)X.size()) #define mp make_pair #define pb push_back #define RALL(X) X.rbegin(),X.rend() #define ALL(X) X.begin(),X.end() using ll = long long ; using ld = long double ; int sqr(int n) { return n * n; } int main() { int T; scanf("%d",&T); while(T --) { int n; scanf("%d",&n); vector<pair<int,int>> p; for(int i = 0; i < n; i ++) { int x, y; scanf("%d%d",&x,&y); p.pb(mp(x, y)); } if(n != 4) { puts("NO"); } else { vector<int> len; for(int i = 0; i < 4; i ++) { for(int j = i + 1; j < 4; j ++) { int dis = (sqr(p[i].first-p[j].first) + sqr(p[i].second-p[j].second)); len.pb(dis); } } sort(ALL(len)); bool ok = 1; for(int i = 0;i < SZ(len) - 3;i ++) { ok &= (len[i] == len[i + 1]); } ok &= (len[SZ(len)-2] == len[SZ(len)-1]); puts(ok ? "YES":"NO"); } } return 0; }
HDU5533简单计算几何
最新推荐文章于 2020-02-08 20:48:16 发布