首页 > 其他 > 详细

Codeforces1300D. Aerodynamic

时间:2020-02-11 15:55:24      阅读:67      评论:0      收藏:0      [点我收藏+]

本题题目有点绕,结合图例大概可知,P(x,y)是以点给出的一个凸包,T是一个点集合,也构成一个凸包,构成的方法就是将原点(0,0)在P(x,y)的边上跑,移动坐标轴,其构成的最远点是个凸包,我们可以画出几个例子,可以看出,T一定是中心对称图形,而P与T相似,P也一定要是中心对称图形,且如果P是奇数条边就一定不满足条件,直接对x,y坐标判断是否是中心对称图形即可,相邻两个点坐标之差与对称的点的差相同

技术分享图片
#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;
}
View Code

 

Codeforces1300D. Aerodynamic

原文:https://www.cnblogs.com/GRedComeT/p/12295089.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!