【codeforces-1020A】New Building for SIS

【codeforces-1020A】New Building for SIS

爬楼的策略:

1.一栋楼上,不用考虑楼之间通道位置,直接去对应楼层。

2.楼与楼之间,如果两个位置都不在有通道的楼层,应当都寻找最近的通道楼层,耗时应当是两边各自到这个楼层的时间+穿越几栋楼的时间;如果任意一个位置在有通道的楼层,无论选择如何去目标位置,竖直方向最短距离都是两层的差值。

#include <iostream>
#include <cmath>

using namespace std;

inline bool inRange(int x, int a, int b) {
    return x >= a && x <= b;
}

int main(void) {
    int n, h, a, b, k, f1, t1, f2, t2;
    scanf("%d%d%d%d%d", &n, &h, &a, &b, &k);
    while (k--) {
        scanf("%d%d%d%d", &t1, &f1, &t2, &f2);
        if (t1 == t2) {
            printf("%d\n", abs(f1 - f2));
        } else {
            if (inRange(f1, a, b) || inRange(f2, a, b))
                printf("%d\n", abs(f1 - f2) + abs(t1 - t2));
            else
                printf("%d\n", min(abs(f1 - a) + abs(f2 - a), abs(f1 - b) + abs(f2 - b))
                    + abs(t1 - t2));
        }
    }
    return 0;
}