Codeforces598 C. Nearest vectors(极角排序)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces598 C. Nearest vectors(极角排序)相关的知识,希望对你有一定的参考价值。

题意:

解法:

极角排序之后,枚举相邻点取min即可.

这题的atan2(y,x)会卡精度,传入的y和x开long double能过,int就不行.

code:

#include<bits/stdc++.h>
using namespace std;
#define PI pair<long double,int>
const long double pi=acos(-1);
const int maxm=2e6+5;
PI e[maxm];
int n;
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++){
        //x和y用int这题就wa了,推测是atan2的int重载丢失精度
        long double x,y;cin>>x>>y;
        long double t=atan2(y,x);
        e[i]={t,i};
    }
    sort(e+1,e+1+n);
    e[++n]=e[1];
    long double mi=1e18;//1和n的差值
    int ax=-1,ay=-1;
    for(int i=2;i<=n;i++){
        long double dif=fabs(e[i].first-e[i-1].first);
        if(dif>pi)dif=pi*2-dif;
        if(dif<mi){
            mi=dif;
            ax=e[i].second,ay=e[i-1].second;
        }
    }
    cout<<ax<<' '<<ay<<endl;
}
signed main(){
    #ifndef ONLINE_JUDGE
    freopen("../in.txt","r",stdin);
    freopen("../out.txt","w",stdout);
    #endif
    ios::sync_with_stdio(0);cin.tie(0);
    solve();
    return 0;
}

以上是关于Codeforces598 C. Nearest vectors(极角排序)的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces - 598C(高精度几何 排序然后枚举)

codeforces 598E E. Chocolate Bar(区间dp)

Codeforces Round #598 (Div. 3)

Codeforces Round #598 (Div. 3)

Codeforces Round #598 (Div. 3) D - Binary String Minimizing

[codeforces]Codeforces Global Round 1 F. Nearest Leaf