给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 13:45:23
给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长

给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长
给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,
求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长

给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长
这个题的基本方法是:求出点集的凸包,对凸包上的所有点进行O(n^2)的枚举即可.关键在于凸包的求法,下面我简单介绍一下LRJ极力推荐的凸包求法.
首先将所有点按X轴排序,不难证明最左和最右的两个一定在凸包上,于是一张两个点分别为起点和终点,求一次上凸包和一次下凸包即可.求上凸包时,用到了栈结构,首先将最左节点入栈,然后各点依次入栈,同时随时检查位于栈顶的三个点组成图形是否为凸(用叉积或有向面积均可),否则将栈内第二个元素出栈.这样最后栈内元素即位上凸包,下凸包自然是类似的啦.代码如下:
const lim=30001;
type point=record
x,y:longint;
end;
var a:array[1..lim+1] of point;
us,ds:array[1..lim+1] of longint;
n,i,j,topu,topd:longint;
max:extended;
procedure qs(s,t:longint);
var i,j:longint;
k:point;
begin
if smax then
max:=sqr(a[us[i]].x-a[ds[j]].x)+sqr(a[us[i]].y-a[ds[j]].y);
writeln(sqrt(max):0:2);
until seekeof;
end.

给你n个点,n很大,定义距离为D(A,B)= |x1 -x2| + |y1 - y2| ,找出这么多点的连线的最长距离,求算法或思路,给代码最好,注意,用遍历不可行,就是算出所有线的距离的算法不可行,时间太长 已知点A,点B表示的数分别为负2.5,1.5若与点B的距离为2个单位长度的点到点A的距离为m,点B到表示3的点的距离为n,试求m^2+2mn-4n^2的值 相反数大于-n(n为正整数)的正整数有( )个 A n B n-1 C -n+1 D 2n-1 已知点ab在数轴上分别表示mn,若a,b两点距离为d,则d与m,n有何数量关系 a,b互为相反数且b不等于0.c,d互为倒数,M是最大负整数,在数轴上有理数n所表示的点到点3的距离为2个单位.求a的2011次方-3cd+m的2012次方+b的2011次方-a/b+n 设int n=6;表达式n%=n+ =n*n的值为___-A 10 B 0 C 12 D 6能具体点吗 如图,已知点A,点B表示的数分别为-2.5,-1.5 回答下列问题:(3)若与点B的距离为2点B到表示3的点的距离为n,试求m²+3mn—4n²(3)若与点B的距离为2个单位长度的点到点A的距离为m mgO2中含n个氧原子,则阿伏加德罗常数的值可表示为?A.2n B.16n/m C.32n/m D.n 在标准状况下,如果2.8升氧气含有n个氧分子,则阿伏伽德罗常数为:A. n/8 B.n/16 C.16n D.8n 在标准状况下,11.2L氧气含有n个氧原子.则阿伏伽德罗可表示为 A n B 2n C 3n D 4n 数轴上的点A表示数4,点B表示数9,A,B两点之间的距离为5,他们有这样的关系:5=9-4 如果已知点C表示数10,点D表示数-3.则C、D两点之间的距离为____点M表示数m,点n表示数n(m>n),则M、N两点之间的距 若定义:int a=511,*b=&a;,则printf(%d ,*b);的输出结果为 ( ). 若线段AB=d点A.B到直线l的距离分别为m和n.讨论符合条件的l的条数 若要求定义具有10个int类型元素的一位数组a,下列定义语句错误的是()A)#define N 10 B)#define n 5 C)int a[5+5]; D)int n=10,a[n];int a[2*n];为什么选BA)#define N 10 B)#define n 5 int a[2*n]; C)int a[5+5]; D)int n=10,a[n]; A.B.C三点在同一数轴上,点A表示的数为m(m为负整数),点B表示的数为2分之n(n为负奇数),点B在点A的左侧,点C到点A.B的距离相等.(1)若将点A向右移动(-m-2分之n)个单位长度,移动后的点A表示的 A,B,C三点在同一数轴上,点a表示的数为m(m为负正数),点b表示的数为n/2(n为负奇数),点b在点a的左侧,点c到点a,b的距离相等.(1)若将点a向右移动(-m-n/2)个单位长度,移动后的点a表示的数与 数轴上,如果A点表示的数是m,将A点向右移动n个单位长度,再向左移动p个单位长度,那么终点B表示什么数?A,B间的距离为多少 如图所示,A,B,C,D,E,F,M,N是某公园里的8个独立景点D,E,B三个景点之间距离相等,其中D,B,C三个景点距离相等,其中D,B,C在一条直线上,E,F,N,C在同一直线上,游客甲从E点出发,沿E-F-N-C-A-B-M,游客Y乙从D点出