51nod 1100 斜率最大

原创 2015年11月18日 18:45:49


平面上有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<bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
struct node
{
	int x;
	int y;
	int index;
}a[maxn];
struct node1
{
	int s;
	int e;
	double k;
	int x;
}b[maxn];

bool cmp1(node t1,node t2)
{
	if(t1.x<t2.x) return true;
	else if(t1.x==t2.x&&t1.y>t2.y) return true;
	return false;
}

bool cmp2(node1 t1,node1 t2)
{
	if(t1.k>t2.k) return true;
	else if(t1.k==t2.k && t1.x<t2.x) return true;
	return false;
}
double fun(node t1,node t2)
{
	double k;
	k=(double) (t2.y-t1.y)/(t2.x-t1.x);
	return k;
}

int main()
{
	int n,i,j,k;
	scanf("%d",&n);
	for(i=1;i<=n;i++) {
		scanf("%d%d",&a[i].x,&a[i].y);
		a[i].index=i;
	}
	sort(a+1,a+1+n,cmp1);
	k=0;
	for(i=2;i<=n;i++) {
		b[k].x=a[i-1].x;
		b[k].s=a[i-1].index;
		b[k].e=a[i].index;
		b[k].k=fun(a[i-1],a[i]);
		k++;
	}
	sort(b,b+k,cmp2);
	printf("%d %d\n",b[0].s,b[0].e);
	for(i=1;i<=n;i++) {
		if(b[i].k==b[i-1].k) printf("%d %d\n",b[1].s,b[1].e);
		else break;
	}
	return 0;
}










版权声明:本文为博主原创文章,未经博主允许不得转载。

51NOD 1100 斜率最大

传送门平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据...
  • qingshui23
  • qingshui23
  • 2016年07月06日 20:37
  • 1525

1100 斜率最大(找规律)

1100 斜率最大 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 平面上有N个点,任意2个点确...
  • update7
  • update7
  • 2017年07月10日 19:58
  • 36273

51NOD 1098 最小方差(基础数学)

传送门 若x1,x2,x3……xn的平均数为k。 则方差s^2 = 1/n * [(x1-k)^2+(x2-k)^2+…….+(xn-k)^2] 。 方差即偏离平方的均值,称为标准差或均方差,方...
  • qingshui23
  • qingshui23
  • 2016年07月05日 19:59
  • 2354

51nod 1100 斜率最大

平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中...
  • h1021456873
  • h1021456873
  • 2015年11月18日 18:45
  • 490

51Nod 1100 斜率最大

平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有...
  • iamldy
  • iamldy
  • 2017年06月21日 22:56
  • 143

51nod 1100 斜率最大

平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有...
  • ZoneForZero
  • ZoneForZero
  • 2017年08月05日 00:16
  • 191

51Nod 1100 斜率最大

平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点...
  • Hermann_weyl
  • Hermann_weyl
  • 2016年12月11日 22:30
  • 174

MicroLogix 1100 应用实例

  • 2018年02月08日 09:16
  • 907KB
  • 下载

51Nod-1116-K进制下的大数

ACM模版描述题解这里我们通过样例可以发现A1A的数位和是21,刚好是K-1的倍数,所以我们不妨多举几组数据测试一下,发现竟然都符合这个规律( ̄┰ ̄*),那么AC就不远了。 可是这里需要强调的是,K...
  • f_zyj
  • f_zyj
  • 2016年08月07日 19:30
  • 598

51nod oj 1100 斜率最大

1100 斜率最大 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 平面上有N个点,任意2个点确...
  • leibniz_zhang
  • leibniz_zhang
  • 2016年09月14日 22:19
  • 195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51nod 1100 斜率最大
举报原因:
原因补充:

(最多只允许输入30个字)