标签:node 51nod1110 最大 直线 斜率 坐标 include id
1100 斜率最大
- 1 秒
- 131,072 KB
- 20 分
- 3 级题
平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。
(点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等,且点坐标为随机。)
收起
输入
第1行,一个数N,N为点的数量。(2 <= N <= 10000) 第2 - N + 1行:具体N个点的坐标,X Y均为整数(-10^9 <= X,Y <= 10^9)
输出
每行2个数,中间用空格分隔。分别是起点编号和终点编号(起点的X轴坐标 < 终点的X轴坐标)
输入样例
5 1 2 6 8 4 4 5 4 2 3
输出样例
4 2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10005
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int x,y,id;
}a[maxn];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{scanf("%d%d",&a[i].x,&a[i].y);
a[i].id=i;
}
sort(a+1,a+n+1,cmp);
double maxx=-inf;
int l,r;
for(int i=1;i<=n-1;i++)
{
double ans=(double)(a[i+1].y-a[i].y)/(a[i+1].x-a[i].x);
if(ans>maxx)
{
maxx=ans;
l=a[i].id;
r=a[i+1].id;
}
}
printf("%d %d\n",l,r);
}
return 0;
}
标签:node,51nod1110,最大,直线,斜率,坐标,include,id 来源: https://blog.csdn.net/sdauguanweihong/article/details/89714764
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。