首页 > 试题广场 >

绕距

[编程题]绕距
  • 热度指数:32526 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}在城市道路规划中,绕距是一个很重要的概念,指的是城市中两个重要人员聚集点之间的欧几里得距离(欧氏距离)与曼哈顿距离之差的绝对值。一般而言,绕距越小,则城市交通参与者在这两个地点之间所走的“冤枉路”就越小。

\hspace{15pt}欧几里得距离(Euclidean distance)表示两点间的直线距离;曼哈顿距离(Manhattan distance)表示只沿着横平竖直的城市街道从起点到达终点的最短距离。

\displaystyle d_E = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}

\displaystyle d_M = |x_1 - x_2| + |y_1 - y_2|

\hspace{15pt}定义两点间的绕距为

\displaystyle \Delta = \bigl|d_M - d_E\bigr|

输入描述:
\hspace{15pt}第一行输入两个整数 x_1,y_1-10^4 \leqq x_1,y_1 \leqq 10^4),分别表示起点的横坐标和纵坐标。

\hspace{15pt}第二行输入两个整数 x_2,y_2-10^4 \leqq x_2,y_2 \leqq 10^4),分别表示终点的横坐标和纵坐标。


输出描述:
\hspace{15pt}输出一个实数,表示两点之间的绕距 \Delta。注意,由于浮点数存在误差,只要您的答案与标准答案之间的误差不超过 10^{-6},您的答案就会被认为是正确的。
示例1

输入

0 0
1 1

输出

0.585786437626904951

说明

两点间曼哈顿距离为 2,欧几里得距离为 \sqrt{2},结果为 2- \sqrt{2},约为 0.585786437626904951
#自测运行不通过,保存并提交通过
#这次做的时候忘了取绝对值一种是abs()另一种是取相反数
#首先记录第一行和第二行的两个数
x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
##先算欧几里得距离
before_sqrt = (x1 - x2) ** 2 + (y1 - y2) ** 2
sqrt = before_sqrt ** 0.5
#再计算曼哈顿距离
#x方向的绝对值
x_dis = x1 - x2
y_dis = y1 -y2
mx = abs(x_dis)
my = abs(y_dis)
dm = mx + my
#绕据
bridge = dm - sqrt
deta = abs(bridge)
print(deta)

发表于 2025-12-18 20:20:41 回复(0)
这题抽什么风了啊,小数点精度要求不是不超过10的-6次方就行吗?我这个怎么要求必须精度完全不差才能过?


发表于 2025-12-18 15:52:57 回复(0)
import math

x1,y1 = map(int,input().split())
x2,y2 = map(int,input().split())

de = math.hypot(x1-x2,y1-y2)  # de = ((x1-x2)**2+(y1-y2)**2)**0.5
dm = abs(x1-x2)+abs(y1-y2)

d = abs(dm-de)
print(d)
发表于 2025-12-16 17:47:47 回复(0)
x1,y1 = map(int,input().split())
x2,y2 = map(int,input().split())
de = (x1-x2)**2+(y1-y2)**2
de = de**0.5
dm = abs(x1-x2)+abs(y1-y2)
s = abs(dm-de)
print(f"{s:.6f}")

发表于 2025-11-09 22:07:41 回复(0)
import math
a,b  =  map(int,input().split())
c,d  =  map(int,input().split())
M_distance = abs(c-a)+abs(b-d)
O_distance = math.sqrt(pow(c-a,2)+pow(b-d,2))
print(M_distance-O_distance)
发表于 2025-10-28 18:41:59 回复(0)
from decimal import Decimal, getcontext 
getcontext().prec=50
x1,y1=map(int,input().split())
x2,y2=map(int,input().split())
dx=abs(x1-x2)
dy=abs(y1-y2)
dm=Decimal(f"{dx+dy}")
de=Decimal(f"{dx**2+dy**2}")**Decimal('0.5')
dd=f"{abs(dm-de)}"
if '.' in dd:
    l,r=dd.split('.')
    result=f"{l}.{r[:18].ljust(18,'0')}"
else:
    result=f"{dd}.{'0'*18}"
print(result)

发表于 2025-10-22 17:55:19 回复(0)
import math
t1=input()
t2=input()
x1,y1=t1.split()
x2,y2=t2.split()
de=math.sqrt((int(x1)-int(x2))**2+(int(y1)-int(y2))**2)
dm=abs(int(x1)-int(x2))+abs(int(y1)-int(y2))
t=abs(dm-de)
print(t)

发表于 2025-07-19 16:11:08 回复(0)
import math

x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())

dx = abs(x1 - x2)
dy = abs(y1 - y2)

dm = dx + dy
de = math.sqrt(dx*dx + dy*dy)

d = abs(dm- de)

print(d)
发表于 2025-07-13 04:26:46 回复(0)
x1,y1 = map(int,(input().split()))
x2,y2 = map(int,(input().split()))
de = ((x1-x2)**2 + (y1-y2)**2)**0.5
dm = abs(x1-x2) + abs(y1-y2)
print(abs(dm - de))
发表于 2025-06-29 16:17:06 回复(0)
x,y = map(int,input().split())
x1,y1 = map(int,input().split())
ogl = ((x - x1) ** 2 + (y-y1) ** 2)**0.5
mhd = abs(x-x1) + abs(y-y1)
print(mhd-ogl)
发表于 2025-05-24 16:31:02 回复(0)