移动距离

本文最后更新于:18 分钟前

[蓝桥杯 2015 省 B] 移动距离

题目描述

X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3…。

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为 6 时,开始情形如下:

1
2
3
1  2  3  4  5  6
12 11 10 9 8 7
13 14 15 .....

我们的问题是:已知了两个楼号 m和 n,需要求出它们之间的最短移动距离。(不能斜线方向移动)

输入格式

输入为 3个整数 w,m,n,空格分开,都在 1 到 10000范围内。

w 为排号宽度,m,n 为待计算的楼号。

输出格式

要求输出一个整数,表示 m 与 n两楼间最短移动距离。

样例 #1

样例输入 #1

1
6 8 2

样例输出 #1

1
4

样例 #2

样例输入 #2

1
4 7 20

样例输出 #2

1
5

理解

注意奇数行和偶数行的排列相反,每个数减一,从0开始排,除以排号宽度就是行号。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include<cstdio>
#include <sstream>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int w,n,m;
int main()
{
cin>>w>>m>>n;
m--;
n--;
int r1=m/w;//行号
int r2=n/w;//行号
int l1=m-r1*w;
int l2=n-r2*w;
if(r1%2==1)l1=(r1+1)*w-1-m;
if(r2%2==1)l2=(r2+1)*w-1-n;
long long s=abs(r1-r2)+abs(l1-l2);
cout<<s;
return 0;
}


移动距离
http://example.com/2023/04/24/移动距离/
作者
zzh
发布于
2023年4月24日
更新于
2023年4月24日
许可协议
原文链接: HTTPS://ZHANGZHIHAO-BLOG.GITHUB.IO
版权声明: 转载请注明出处!