码迷,mamicode.com
首页 > 其他好文 > 详细

[CF1299B] Aerodynamic - 结论,找规律,计算几何

时间:2020-05-01 16:35:22      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:class   fabs   str   中心   计算几何   严格   ||   lin   esc   

Description

给定一个由 $ n $ 个点组成的严格(不存在三点共线)凸多边形。

你要将这个图形平移 $ n $ 次,每次将一个顶点与原点 $ (0,0) $ 重合。

请判断这 $ n $ 个平移后的多边形除了与原点重合的点之外的点组成的多边形是否与原图形相似。

在读入中,保证输入的点按逆时针顺序排列,形成严格凸多边形。

$ 3\le n\le 10^5 $

Solution

最终的这个图形就是 \(S\)\(-S\) 的闵可夫斯基和

结论:新图形与原图形相似,当且仅当原图形是中心对称图形

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 1000005;

int n;
double x[N],y[N];

signed main() {
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>x[i]>>y[i];
    }
    if(n&1) {
        cout<<"no";
    }
    else {
        for(int i=1;i<=n/2;i++) x[i]+=x[i+n/2], y[i]+=y[i+n/2];
        int flag=1;
        for(int i=2;i<=n/2;i++) {
            if(fabs(x[i]-x[1])>1e-6 || fabs(y[i]-y[1])>1e-6) flag=0;
        }
        if(flag) cout<<"yes";
        else cout<<"no";
    }
}

[CF1299B] Aerodynamic - 结论,找规律,计算几何

标签:class   fabs   str   中心   计算几何   严格   ||   lin   esc   

原文地址:https://www.cnblogs.com/mollnn/p/12813833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!