P1639 [USACO18FEB] Teleportation B 题解

题意简述

给定起点 \(a\),终点 \(b\),以及可以互相直达的两点 \(x\)\(y\)。求从 \(a\)\(b\) 的最短路程。

思路简述

不难想到,从 \(a\) 点到 \(b\) 点一共有三种方式:

  1. 直接从 \(a\) 走到 \(b\)。路程为:\(\left| a - b \right|\)
  2. \(a\) 走到 \(x\),传送到 \(y\),再从 \(y\) 走到 \(b\)。路程为:\(\left| a - x \right| + \left| y - b \right|\)
  3. \(a\) 走到 \(y\),传送到 \(x\),再从 \(x\) 走到 \(b\)。路程为:\(\left| a - y \right| + \left| x - b \right|\)

直接按照三种方式模拟即可。

代码

#include <bits/stdc++.h>
using namespace std;

int a, b, x, y;

int main(){
    cin >> a >> b >> x >> y;
    cout << min(abs(x - a) + abs(y - b), min(abs(b - a), abs(x - b) + abs(y - a)));
    return 0;
}
posted @ 2024-01-25 18:13  Floze3  阅读(234)  评论(0)    收藏  举报