本文主要是介绍Educational Codeforces Round 1C. Nearest vectors(极角排序+long double 精度),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接
题意:给你一堆的向量,问你向量之间的夹角最小的是那一对。
解法:极角排序,然后枚举相邻的一对就可以啦,但是坑爹的是double精度不够,使用long double 读入使用cin。。。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<int,int> P;
const int maxn=100005;
const int inf=1<<27;
const LL mod=1e9+7;
struct point{long double x,y;int id;bool operator<(const point t) const {return atan2(y,x)<atan2(t.y,t.x);}
}p[maxn];
#define pi acos(-1.0)
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){cin>>p[i].x>>p[i].y;//scanf("%Lf%Lf",&p[i].x,&p[i].y);p[i].id=i;}sort(p,p+n);long double ans=100*pi;int x=0,y=1;p[n]=p[0];for(int i=1;i<=n;i++){long double t=atan2(p[i].y,p[i].x)-atan2(p[i-1].y,p[i-1].x);if(t<0)t+=pi*2;if(ans>t){ans=t;x=p[i].id;y=p[i-1].id;}}printf("%d %d\n",x+1,y+1);return 0;
}
这篇关于Educational Codeforces Round 1C. Nearest vectors(极角排序+long double 精度)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!