A. New Building for SIS

题目链接

Codeforces Round #503 (by SIS, Div. 2)--A. New Building for SIS

题解

简单题。题意大概是给定一些相邻的楼房,它们在连续的几层之间互相联通,每次移动可以上下移动一层或者在联通的几层内移动到相邻的楼房,给出多个询问,求某一位置到另一位置需要多少次移动。
直接分类讨论判断出每一种情况的走法即可。

代码

#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;

int n, h, a, b, k, ta, fa, tb, fb;
int main() {
    cin >> n >> h >> a >> b >> k;
    while (k--) {
        cin >> ta >> fa >> tb >> fb;
        if (ta == tb)
            cout << max(fa, fb) - min(fa, fb) << endl;
        else if (min(fa, fb) <= b && max(fa, fb) >= a) {
            cout << max(fa, fb) - min(fa, fb) + max(ta, tb) - min(ta, tb) << endl;
        }
        else if (max(fa, fb) >= a && min(fa, fb) <= b) {
            cout << max(fa, fb) - min(fa, fb) + max(ta, tb) - min(ta, tb) << endl;
        }
        else {
            int ans(0);
            if (fa > b) {
                ans += fa - b;
                fa = b;
            }
            else if (fa < a) {
                ans += a - fa;
                fa = a;
            }
            ans += abs(fa - fb) + abs(ta - tb);
            cout << ans << endl;
        }
    }
}

标签: math

添加新评论