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

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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";
    }
}

以上是关于[CF1299B] Aerodynamic - 结论,找规律,计算几何的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1300D - Aerodynamic

CodeForces - 1299B. Aerodynamic

CF #737(div2)C. Moamen and XOR,位运算,结论题,推公式

CF1444B Divide and Sum(结论题)

CF1444B Divide and Sum(结论题)

做题cf603E——线段树分治