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)