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 斜率最大

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

51NOD 1100 斜率最大

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

51nod1100斜率最大

51nod1100斜率最大按照x坐标从小到大排序 斜率最大的肯定是相邻的两个坐标#include #include #include #include #include #include #incl...

51nod 1100 斜率最大

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

1100 斜率最大(找规律)

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

51nod:1174 区间中最大的数(RMQ)

1174 区间中最大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出一个有N个数的序列,编号...
  • zugofn
  • zugofn
  • 2017年04月17日 21:51
  • 190

51Nod-1270-数组的最大代价

ACM模版描述题解动态规划,极端考虑法,每个A[i]要么取1,要么取B[i]。 状态转移方程也很好推(dp[i][j]:j->0表示A[i]取1,j->1表示A[i]取B[i]): dp[i][...
  • f_zyj
  • f_zyj
  • 2016年08月10日 21:31
  • 134

51Nod Problem 1102 面积最大的矩形(DP)

51Nod Problem 1102 面积最大的矩形(DP)

51nod 1062 序列中最大的数

打表。//@auther zhou //@Number 201408070203 //@start time: //@finish time: /*@此处注意: */ /* 测试数据 */ #i...
  • mrspot
  • mrspot
  • 2017年04月12日 17:07
  • 126

POJ 2082 Terrible Sets 51nod 1102 面积最大的矩形 《题意好难懂---<贪心+单调栈>》

Terrible Sets Time Limit: 1000MS   Memory Limit: 30000KB   64bit IO Format: %lld & %llu Sub...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51nod 1100 斜率最大
举报原因:
原因补充:

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