51 nod 1100 斜率最大

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
 收藏
 关注
平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。
(点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等,且点坐标为随机。)
Input
第1行,一个数N,N为点的数量。(2 <= N <= 10000)
第2 - N + 1行:具体N个点的坐标,X Y均为整数(-10^9 <= X,Y <= 10^9)
Output
每行2个数,中间用空格分隔。分别是起点编号和终点编号(起点的X轴坐标 < 终点的X轴坐标)
Input示例
5
1 2
6 8
4 4
5 4
2 3
Output示例
4 2

我的思路是:把所有横坐标不相同的两个点的斜率都求一下,因为数据量不是很大,所以能过...

#include <iostream>
#include <algorithm>
using namespace std;
struct pot
{
	int x,y;
}a[10005];
int main ()
{
	int n,i,j;
	cin>>n;
	for(i=1; i<=n; ++i)
	{
		cin>>a[i].x>>a[i].y;
	}
	double k=-3e9;
	int cnt=1,cnt1=2;
	for(i=1; i<=n; ++i)
	{
	    double c;
		for(j=i+1; j<=n; ++j)
		{
			if(a[j].x==a[i].x)
			continue;
			c=(a[j].y-a[i].y)/(a[j].x-a[i].x);
			if(k<c)
			{
				k=c;
				if(a[i].x<a[j].x)
				{
					cnt=i; cnt1=j;
			    }
				else
				{
					cnt1=i; cnt=j;
				}
			}
		}
	}
	cout<<cnt<<" "<<cnt1<<endl;
	return 0;
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rem_little_fan_boy/article/details/79950753
个人分类: 51nod 思维
上一篇51 nod 1099 任务执行顺序
下一篇51 nod 1101 换零钱
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭