P1639 [USACO18FEB] Teleportation B

python代码:

为了求解这个问题,我们需要考虑如何利用传送门来最小化从地点 (a) 到地点 (b) 的运输距离。我们可以通过以下步骤来解决这个问题:

  1. 直接运输:不使用传送门,直接从 (a) 运输到 (b)。
  2. 使用传送门:考虑使用传送门的可能路径,计算每种路径的距离,并选择最小值。

具体来说,我们可以考虑以下几种路径:

  • 从 (a) 直接运输到 (b)。
  • 从 (a) 运输到传送门的入口 (x),传送到出口 (y),再运输到 (b)。
  • 从 (a) 运输到传送门的出口 (y),传送到入口 (x),再运输到 (b)。

我们需要计算每种路径的距离,并选择最小值。

通过这种方式,我们可以确保找到从 (a) 到 (b) 的最小运输距离。

下面是实现这个逻辑的Python代码:

def min_distance(a, b, x, y):
    # 直接从 a 运输到 b
    direct_distance = abs(a - b)
    
    # 从 a 运输到 x,传送到 y,再运输到 b
    distance_via_x_to_y = abs(a - x) + abs(y - b)
    
    # 从 a 运输到 y,传送到 x,再运输到 b
    distance_via_y_to_x = abs(a - y) + abs(x - b)
    
    # 选择最小的距离
    min_distance = min(direct_distance, distance_via_x_to_y, distance_via_y_to_x)
    
    return min_distance

# 读取输入
a, b, x, y = map(int, input().split())

# 计算并输出最小距离
print(min_distance(a, b, x, y))

c++代码:

代码1:

#include <iostream>
#include <algorithm>

using namespace std;

int min_distance(int a, int b, int x, int y) {
    // 直接从 a 运输到 b
    int direct_distance = abs(a - b);
    
    // 从 a 运输到 x,传送到 y,再运输到 b
    int distance_via_x_to_y = abs(a - x) + abs(y - b);
    
    // 从 a 运输到 y,传送到 x,再运输到 b
    int distance_via_y_to_x = abs(a - y) + abs(x - b);
    
    // 选择最小的距离
    int min_distance = min({direct_distance, distance_via_x_to_y, distance_via_y_to_x});
    
    return min_distance;
}

int main() {
    int a, b, x, y;
    // 读取输入
    cin >> a >> b >> x >> y;
    
    // 计算并输出最小距离
    cout << min_distance(a, b, x, y) << endl;
    
    return 0;
}

代码2:

#include<iostream>
#include<algorithm>
using namespace std;
int a,b,c,d;
int main(){
	cin>>a>>b>>c>>d;
	cout<<min(abs(c - a) + abs(d - b),min(abs(b - a),abs(c - b) + abs(d - a)))<<endl;
	return 0;
}

pascal代码:

program MinDistance;
uses math;

function min_distance(a, b, x, y: integer): integer;
var
  direct_distance, distance_via_x_to_y, distance_via_y_to_x: integer;
begin
  // 直接从 a 运输到 b
  direct_distance := abs(a - b);
  
  // 从 a 运输到 x,传送到 y,再运输到 b
  distance_via_x_to_y := abs(a - x) + abs(y - b);
  
  // 从 a 运输到 y,传送到 x,再运输到 b
  distance_via_y_to_x := abs(a - y) + abs(x - b);
  
  // 选择最小的距离
  min_distance := min(direct_distance, min(distance_via_x_to_y, distance_via_y_to_x));
end;

var
  a, b, x, y: integer;
begin
  // 读取输入
  readln(a, b, x, y);
  
  // 计算并输出最小距离
  writeln(min_distance(a, b, x, y));
end.

 本篇完

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值