4 2
/* 3个点A,B,C,把它们的按x坐标排序。假设排序后的顺序是ABC,那么有两种情况:其中k()表示求斜率。 1.ABC共线,则k(AB)=k(BC)=k(AC) 2.ABC不共线,则ABC将形成一个三角形,那么k(AC)<max(k(AB), k(BC)) 所以斜率最大的必然是挨在一起的两个点。 时间复杂度n*logn */ #include<cstdio> #include<iostream> #include<algorithm> using namespace std; struct node{ int x,y,id; bool operator<(node t)const { return x<t.x; } }point[10010]; int n; int main() { ios::sync_with_stdio(0); cin>>n; for(int i=0;i<n;i++) { cin>>point[i].x>>point[i].y; point[i].id=i; } sort(point,point+n); double ans=-99999999; int at; for(int i=1;i<n;i++) { double g=1.0*(point[i].y-point[i-1].y)/(point[i].x-point[i-1].x); if(ans<g) { ans=g; at=i; } } cout<<point[at-1].id+1<<" "<<point[at].id+1<<endl; return 0; }
