很显然本题应当分奇偶进行讨论来求出行列,这个过程应当使用取模和除法运算。
因为第一行做相应的处理后计算结果会出现 0,所以行列号从 0 开始。
对于奇数行(-1 是为了从第零行开始):
row=n−1widthcol=n mod width
\begin{align}
row & = \frac{n-1}{width}\\
col & = n \bmod width
\end{align}
rowcol=widthn−1=nmodwidth
对于偶数行:
row=n−1widthcol=width−(n mod width)+1
\begin{align}
row & = \frac{n-1}{width}\\
col & = width - (n \bmod width) + 1
\end{align}
rowcol=widthn−1=width−(nmodwidth)+1
所以最终结果就是:
dis=∣rowm−rown∣+∣colm−coln∣
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;
}
423

被折叠的 条评论
为什么被折叠?



