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轴坐标排序,正序输出。数据...

51nod 1100 斜率最大

题目链接:传送门 计算几何水题,排序遍历一遍能过,要考虑斜率的正负值 代码如下:#include using namespace std; #define N 10010 #define mod...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

51Nod-1100-斜率最大

ACM模版描述题解因为斜率最大的两点一定是x轴坐标相邻的两点。 所以,先进行排序,将斜率最大的线存起来,最后对线进行按x轴坐标排序,正序输出对应编号即可。代码#include #include ...
  • f_zyj
  • f_zyj
  • 2016-08-07 02:46
  • 303

51nod 1100 斜率最大

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

【51NOD 1666】最大值

Description定义一种新的运算符$。 具体地,A$B(p)A\$B(p)的值可以用如下代码来表示。while (A) {a[cnta++]=A%10; A/=10;} while (B) {...

51NOD 1402 最大值

1402 最大值 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 一个N长的数组s[](注意这里的数组初始下标设为1,而不...

51Nod-1349-最大值

ACM模版描述题解和 51Nod 1215 数组的宽度 几乎一毛一样,不过这个只需要求一下每个数作为最大值的左右区间范围,单调栈搞一遍就行了!最后再求一个前缀和就没毛病了。我没有加输入输出优化,险过,...
  • f_zyj
  • f_zyj
  • 2017-05-19 15:02
  • 151

51Nod-1402-最大值

ACM模版描述题解一开始看到这道题,感觉挺简单的,但是,我只关注了明沟,却忽略了暗坑!!! 首先,这里我们将这些特殊点成为卡点,但是不是所有的卡点都能卡住数据的,其中,最容易想到的是t T[i -...
  • f_zyj
  • f_zyj
  • 2016-08-13 01:01
  • 203

51nod 1442 最大流

点击打开链接 题意:中文了 思路:最大流求解,源点连城市流量ai,城市连汇点流量bi,下面的边是无向图,拆点后建有向的就可以了,最后判断满流#include #include #include...

hdu2829(斜率dp)

链接:点击打开链接 题意:给定一个长度为n的序列,将序列分成m段,每段序列都有权值,权值为序列内两个数两两相乘之和,输出最小的权值 代码:#include #include #include ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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