很显然本题应当分奇偶进行讨论来求出行列,这个过程应当使用取模和除法运算。
因为第一行做相应的处理后计算结果会出现 0,所以行列号从 0 开始。
对于奇数行(-1 是为了从第零行开始):
r
o
w
=
n
−
1
w
i
d
t
h
c
o
l
=
n
m
o
d
w
i
d
t
h
\begin{align} row & = \frac{n-1}{width}\\ col & = n \bmod width \end{align}
rowcol=widthn−1=nmodwidth
对于偶数行:
r
o
w
=
n
−
1
w
i
d
t
h
c
o
l
=
w
i
d
t
h
−
(
n
m
o
d
w
i
d
t
h
)
+
1
\begin{align} row & = \frac{n-1}{width}\\ col & = width - (n \bmod width) + 1 \end{align}
rowcol=widthn−1=width−(nmodwidth)+1
所以最终结果就是:
d
i
s
=
∣
r
o
w
m
−
r
o
w
n
∣
+
∣
c
o
l
m
−
c
o
l
n
∣
dis=\left | row_m-row_n\right | + \left| col_m-col_n\right|
dis=∣rowm−rown∣+∣colm−coln∣
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x, y;
};
int main(int argc, char const *argv[])
{
int w, m, n;
cin >> w >> m >> n;
Node a;
a.x = (m-1) / w;
if(a.x % 2 != 0){
a.y = m % w;
}else{
a.y = w - m % w + 1;
}
//cout << a.x << " " << a.y << endl;
Node b;
b.x = (n-1) / w;
if(b.x % 2 != 0){
b.y = n % w;
}else{
b.y = w - n % w + 1;
}
//cout << b.x << " " << b.y << endl;
cout << abs(a.x - b.x) + abs(a.y - b.y);
return 0;
}