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

版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/Smiler_/article/details/82107415

A. New Building for SIS

http://codeforces.com/contest/1020/problem/A

题意:给你n个建筑物,标号1-n,每个建筑物有h层,同一个建筑物的相邻层之间互相可达,相邻建筑在a~b这些层之间的层互相可达,现在给你两个位置,建筑的标号和特定的层,问你从给出的一个位置到另一个位置最少需要移动多少次。

思路:如果两个位置在不同的建筑物上,我们从一个位置达到另一个位置首先达到可以移动的层的位置,然后平移移动到另一个建筑物,再从这一层到达另一个位置的层数。

这里要注意如果是在同一个建筑物里,则直接移动即可,这里需要特判一下。

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n,h,a,b,k;
    cin>>n>>h>>a>>b>>k;
    while(k--)
    {
        int t1,f1,t2,f2;
        cin>>t1>>f1>>t2>>f2;
        if(t1==t2)
        {
            cout<<abs(f1-f2)<<endl;
            continue;
        }
        int ans=abs(t1-t2);
        if(f1<=a)
        {
            ans+=abs(a-f1);
            ans+=abs(a-f2);
        }
        else if(f1>=b)
        {
            ans+=abs(f1-b);
            ans+=abs(f2-b);
        }
        else
        {
            ans+=abs(f1-f2);
        }
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Smiler_/article/details/82107415