首页 > 其他 > 详细

[Codeforces 1300D]Aerodynamic(计算几何)

时间:2020-02-10 11:23:53      阅读:104      评论:0      收藏:0      [点我收藏+]

[Codeforces 1300D]Aerodynamic(计算几何)

题面

给出一个凸多边形,判断该多边形平移得到的包含原点的所有多边形的并得到的吐血,和这个凸多边形本身相似。

 分析

发现如果点数为奇数显然不行。否则判断这个多边形是否中心对称即可,即判断对边中点是否重合。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100000
using namespace std; 
struct Vector{
    double x;
    double y;
    Vector(){

    }
    Vector(double _x,double _y){
        x=_x;
        y=_y;
    }
    friend Vector operator + (Vector p,Vector q){
        return Vector(p.x+q.x,p.y+q.y);
    }
    friend Vector operator - (Vector p,Vector q){
        return Vector(p.x-q.x,p.y-q.y);
    }
    friend Vector operator * (Vector a,double d){
        return Vector(a.x*d,a.y*d);
    }
    friend Vector operator / (Vector a,double d){
        return Vector(a.x/d,a.y/d);
    }
    friend bool operator == (Vector p,Vector q){
        return p.x==q.x&&p.y==q.y;
    }
    friend bool operator != (Vector p,Vector q){
        return !(p==q);
    }
};
typedef Vector point;
inline double dot(Vector p,Vector q){
    return p.x*q.x+p.y*q.y;
}
inline double dist(point p,point q){
    return sqrt(dot(p-q,p-q));
}
inline double cross(Vector p,Vector q){
    return p.x*q.y-p.y*q.x;
}
inline double length(Vector x){
    return sqrt(dot(x,x));
} 
int n;
point a[maxn+5],b[maxn+5];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lf %lf",&a[i].x,&a[i].y);
    }
    if(n%2==1){
        printf("NO\n");
    }else{
        for(int i=2;i<=n/2;i++){
            if((a[i]+a[i+n/2])!=(a[i-1]+a[i-1+n/2])){
                printf("NO\n");
                return 0;
            }
        }
        printf("YES\n");
    }
}

[Codeforces 1300D]Aerodynamic(计算几何)

原文:https://www.cnblogs.com/birchtree/p/12289948.html

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