zoukankan      html  css  js  c++  java
  • [CF1299B] Aerodynamic

    Description

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

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

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

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

    $ 3le nle 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";
        }
    }
    
  • 相关阅读:
    Unix&Linux下常见的性能分析工具介绍
    理解Load Average做好压力测试
    cron 的配置和说明
    原生js模仿下拉刷新功能
    webpack初步了解
    数组的迭代方法
    webpack4
    反思面向对象
    C和lua的互相调用
    对Zookeeper的一些分析
  • 原文地址:https://www.cnblogs.com/mollnn/p/12813833.html
Copyright © 2011-2022 走看看