AcWing_1219 移动距离(模拟)

AcWing

1219. 移动距离

#include <bits/stdc++.h>
using namespace std;
int main(){
    int w, m, n;
    cin >> w >> m >> n;
    // if(m < n) swap(m, n);
    int a = (m - 1) / (2 * w), b = (n - 1) / (2 * w);   // 区域号,每两行为1个区域,从0开始编号
    int rm, cm, rn, cn; // 区域内行列号,r \in [1, 2], c \in [1, w]
    if(m > a * 2 * w + w){
        rm = 2;
        cm = (a+1) * 2*w - m + 1;
    }
    else{
        rm = 1;
        cm = m - a * 2*w;
    }
    if(n > b * 2 * w + w){
        rn = 2;
        cn = (b+1) * 2*w - n + 1;
    }
    else{
        rn = 1;
        cn = n - b * 2*w;
    }
    // cout << a << ' ' << b << endl;
    // cout << rm << ' ' << rn << ' ' << cm << ' ' << cn << endl;
    cout << abs(cm - cn) + abs((2 * a + rm) - (2 * b + rn));
    return 0;
}