本题题目有点绕,结合图例大概可知,P(x,y)是以点给出的一个凸包,T是一个点集合,也构成一个凸包,构成的方法就是将原点(0,0)在P(x,y)的边上跑,移动坐标轴,其构成的最远点是个凸包,我们可以画出几个例子,可以看出,T一定是中心对称图形,而P与T相似,P也一定要是中心对称图形,且如果P是奇数条边就一定不满足条件,直接对x,y坐标判断是否是中心对称图形即可,相邻两个点坐标之差与对称的点的差相同
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; void run_case() { int n; cin >> n; vector<int> x(n+1), y(n+1); for(int i = 1; i <= n; ++i) cin >> x[i] >> y[i]; if(n & 1) { cout << "NO"; return; } n >>= 1; for(int i = 1; i <= n; ++i) if(x[i+1]-x[i] != x[(i+n)]-x[(i+n)%(2*n)+1] || y[i+1]-y[i] != y[(i+n)]-y[(i+n)%(2*n)+1]) { cout << "NO"; return; } cout << "YES"; } int main() { ios::sync_with_stdio(false), cin.tie(0); //int t; cin >> t; //while(t--) run_case(); cout.flush(); return 0; }